Настройка агента пользователя java URLConnection
Я пытаюсь разобрать веб-страницу с помощью Java с URLConnection. Я пытаюсь настроить user-agent следующим образом:
java.net.URLConnection c = url.openConnection();
c.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2");
но результирующий пользовательский агент-это тот, который я указываю, с добавлением "Java/1.5.0_19" в конце. Есть ли способ действительно установить пользовательский агент без этого добавления?
5 ответов:
руку, задание
http.agent
системное свойство, чтобы""
может сделать трюк (у меня нет кода передо мной).вам может сойти с рук:
System.setProperty("http.agent", "");
но это может потребовать гонки между вами и инициализацией обработчика протокола URL, если он кэширует значение при запуске (на самом деле, я не думаю, что это так).
свойство также может быть установлено через файлы JNLP (доступные для апплетов из 6u10) и по команде линия:
-Dhttp.agent=
или для команд оболочки:
-J-Dhttp.agent=
просто для уточнения: setRequestProperty работает просто отлично! По крайней мере с Java 1.6.30.
Я слушал на моей машине с netcat (слушатель порта):
$ nc -l -p 8080
Он просто слушает порт, поэтому вы видите все, что запрашивается, например, raw http-заголовки.
и получил следующие http-заголовки без setRequestProperty:
GET /foobar HTTP/1.1 User-Agent: Java/1.6.0_30 Host: localhost:8080 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive
и с setRequestProperty:
GET /foobar HTTP/1.1 User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2 Host: localhost:8080 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive
как вы можете видеть, агент пользователя был правильно набор.
полный пример:
import java.io.IOException; import java.net.URL; import java.net.URLConnection; public class TestUrlOpener { public static void main(String[] args) throws IOException { URL url = new URL("http://localhost:8080/foobar"); URLConnection hc = url.openConnection(); hc.setRequestProperty("User-Agent", "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.4; en-US; rv:1.9.2.2) Gecko/20100316 Firefox/3.6.2"); System.out.println(hc.getContentType()); } }
немного изменен Тома Hawtins ответ:
System.setProperty("http.agent", "");
его работа для меня установите User-Agent в свойстве addRequestProperty.
URL url = new URL(<URL>); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.addRequestProperty("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0");
HTTP-серверы, как правило, отклоняют старые браузеры и системы.
страница Tech Blog( wh): наиболее распространенные агенты пользователей отражает свойство user-agent вашего текущего браузера в разделе "ваш агент пользователя:", который может быть применен для установки свойства запроса "User-Agent"
java.net.URLConnection
или системное свойство "http.агент."