Я пишу небольшую Java-программу для получения количества результатов по заданному поисковому запросу Google. По какой-то причине в Java я получаю 403 Запрещено, но я получаю правильные результаты в веб-браузерах. Код:
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 403for URL: https://www.google.com/search?q=test at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source) at DataGetter.getResultAmount(DataGetter.java:15) at DataGetter.main(DataGetter.java:10)
Почему он это делает?
Переведено автоматически
Ответ 1
Вам просто нужно установить заголовок пользовательского агента, чтобы он работал:
URLConnectionconnection=newURL("https://www.google.com/search?q=" + query).openConnection(); connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11"); connection.connect();
Протокол SSL был прозрачно обработан для вас, как видно из вашего стека исключений.
Получить итоговую сумму на самом деле не так просто, после этого вам нужно притвориться, что вы браузер, извлекая файл cookie и анализируя ссылку на токен перенаправления.
В результате выполнения полного кода я получаю 2930000000L.
Ответ 2
Для меня это сработало, добавив заголовок: "Accept": "* / *"
Ответ 3
Вероятно, вы устанавливаете неправильные заголовки. Используйте LiveHttpHeaders (или эквивалент) в браузере, чтобы увидеть, какие заголовки отправляет браузер, затем эмулируйте их в своем коде.
Ответ 4
Это потому, что сайт использует SSL. Попробуйте использовать HTTP-клиент Jersey. Вероятно, вам также придется немного узнать о HTTPS и сертификатах, но я думаю, что Jersey может сделать ставку на игнорирование большинства деталей, касающихся реальной безопасности.