Настройка пользовательского агента java URLConnection
Я пытаюсь проанализировать веб-страницу с помощью Java с помощью URLConnection. Я пытаюсь настроить пользовательский агент следующим образом:
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" до конца. Есть ли способ действительно установить агент пользователя без этого добавления?
Ответы
Ответ 1
Отключить руку, установив системное свойство http.agent
на ""
, может сделать трюк (у меня нет кода передо мной).
Вам может сойти с рук:
System.setProperty("http.agent", "");
но это может потребовать гонки между вами и инициализацией обработчика протокола URL, если он кэширует значение при запуске (фактически, я не думаю, что это так).
Свойство также можно установить через файлы JNLP (доступные для апплетов от 6u10) и в командной строке:
-Dhttp.agent=
Или для команд оболочки:
-J-Dhttp.agent=
Ответ 2
Просто для пояснения: setRequestProperty("User-Agent", "Mozilla ...")
теперь работает просто отлично и не добавляет java/xx
в конце! По крайней мере, с Java 1.6.30 и новее.
Я слушал на своей машине с netcat (слушатель порта):
$ nc -l -p 8080
Он просто прослушивает порт, поэтому вы видите все, что запрашивается, например, необработанные заголовки 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());
}
}
Ответ 3
Слегка изменив Tom Hawtins, ответьте на:
System.setProperty("http.agent", "");
в соответствии с http://www.ivoa.net/forum/apps/0903/0610.htm
Ответ 4
его работа для меня
установить 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");
Ответ 5
HTTP-серверы склонны отклонять старые браузеры и системы.
Страница Технический блог (wh): Наиболее распространенные пользовательские агенты отражает свойство user-agent вашего текущего браузера в разделе "Your user agent is:", который можно применить для установки свойства запроса "User- Агент "java.net.URLConnection
или системное свойство" http.agent ".