Получение отказа в доступе при вызове API без вызова официального веб-сайта

#java #api

#java #API

Вопрос:

Я Бенджамин, в настоящее время изучаю ИТ и делаю простое приложение для проекта последнего года. Простое приложение вызывает сторонний API (компания, производящая модные товары) и возвращает описание продукта, уровень запасов и т. Д. Пользователям.

Во-первых, у меня нет никаких официальных документов API, и все начинается с нуля.

Я использую java — CloseableHttpClient для вызова API с помощью метода GET . Кодирование работает нормально, НО я столкнулся с ошибкой «нет ответа» или отказано в доступе, если я попытался вызвать API напрямую. (без каких-либо файлов cookie или с существующими файлами cookie с официального веб-сайта)

Затем я попытался с помощью браузера (любого) перейти по ссылке API, он вернет отказ в доступе, но когда я попробовал с помощью браузера и зашел на официальный веб-сайт без какого-либо входа в систему, и снова нажал на API, то смог получить ответы.

Меня пытались передать файлы cookie, которые были возвращены с официального веб-сайта, но по-прежнему нет ответов, когда я звоню / нажимаю на ссылку API в java code или Postman.

Ответьте, почему вызывается API, у которого нет официальной документации, как показано ниже: Это FYP в университете, API выбирается и предоставляется преподавателем университета.

Мой код, как показано ниже :

                       CloseableHttpClient httpClient = HttpClientBuilder.create()
                                  .setDefaultCookieStore(cookieStoreNew)
                                  .setUserAgent("Mozilla/5.0").build();
                          HttpGet getRequest = new HttpGet(url);
                          getRequest.addHeader("accept", "application/json");
                          getRequest.addHeader(HttpHeaders.USER_AGENT, "Mozilla/5.0");
                          getRequest.setConfig(requestConfig);
                          System.out.println("this is get request config : n" getRequest);
                          System.out.println("n start execute");
                          HttpResponse response = httpClient.execute(getRequest);//it will stucked here and no reponses
                          System.out.println("n end execute");
                          if (response.getStatusLine().getStatusCode() != 200) {
                              throw new RuntimeException("Failed : HTTP error code : "
                                   response.getStatusLine().getStatusCode());
                          }
 

Пожалуйста, прокомментируйте ниже, если у вас есть какие-либо идеи или советы, и мы ценим вашу помощь.

Это не ложная подача, я исследовал более 2 недель. Спасибо

Ответ №1:

Я работал в таких сценариях, подобных вашему, когда написанный код должен отправлять любой HTTP-запрос к API (стороннему).

Насколько говорит мой опыт, для вашего кода должна быть какая-то проблема с аутентификацией.
Как вы сказали, при нажатии на тот же API в браузере также указывается «Доступ запрещен», API должен запрашивать некоторые учетные данные для входа с отправляемым вами запросом GET, поэтому, когда cred не найдены, API отвечает «Доступ запрещен»..

Не могли бы вы проверить код состояния http, который вы получаете в postman, когда вы нажимаете на API, он должен быть 401/403 (несанкционированный).

если в postman код состояния http действительно равен 401/403, то, пожалуйста, попросите у вашего университетского преподавателя любые логины, которые могут потребоваться для доступа к API.

Комментарии:

1. Привет, Наман, спасибо за ваш ответ. Да, я получаю 403 при нажатии на API в браузере, но при попытке в Postman он отправляет и не отвечает (так же, как мой Java-код). И да, обсуждал с университетской лекцией, но ответ: «это одна из частей, которую он хочет, чтобы я решил». Вопрос: можем ли мы «угадать» учетные данные для входа или любые учетные данные аутентификации, которые нужны API? Спасибо

2. @Ben Lim: нет учетных данных для входа. Вы сказали в своем вопросе: «Когда я попытался с помощью браузера и зашел на официальный веб-сайт без какого-либо входа в систему, и снова нажал на API, после чего смог получать ответы». Это означает, что на официальном веб-сайте установлен некоторый файл cookie, и я предполагаю, что ваш лектор хочет, чтобы вы выяснили, как создатьфайл cookie в вашем коде. В худшем случае перейдите на официальный веб-сайт в своем коде и посмотрите, какой ответ вы получите.