#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 в вашем коде. В худшем случае перейдите на официальный веб-сайт в своем коде и посмотрите, какой ответ вы получите.