Настройка пользовательского агента Java URLConnection - PullRequest
70 голосов
/ 27 марта 2010

Я пытаюсь проанализировать веб-страницу, используя 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 ]

87 голосов
/ 22 марта 2012

Просто для пояснения: setRequestProperty работает просто отлично! По крайней мере, с 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());
    }

}
60 голосов
/ 27 марта 2010

От руки, установка системного свойства http.agent на "" может помочь (у меня нет кода передо мной).

Вы можете сойти с рук:

 System.setProperty("http.agent", "");

но это может потребовать состязания между вами и инициализацией обработчика протокола URL, если он кэширует значение при запуске (на самом деле, я так не думаю).

Свойство также можно установить с помощью файлов JNLP (доступно для апплетов с 6u10) и в командной строке:

-Dhttp.agent=

Или для команд-оболочек:

-J-Dhttp.agent=
7 голосов
/ 27 марта 2010

Слегка изменено Том Хоутинс ответ на:

 System.setProperty("http.agent", ""); 

в соответствии с http://www.ivoa.net/forum/apps/0903/0610.htm

3 голосов
/ 15 ноября 2017

это работа для меня установить 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");
1 голос
/ 28 июля 2018

HTTP-серверы склонны отклонять старые браузеры и системы.

Страница Технический блог (wh): Наиболее распространенные пользовательские агенты отражает свойство user-agent вашего текущего браузера в разделе «Ваш пользовательский агент:» , который может быть применяется для установки свойства запроса «User-Agent» для java.net.URLConnection или системного свойства «http.agent».

...