web-dev-qa-db-ja.com

Java URLConnectionのユーザーエージェントを設定する

URLConnectionでJavaを使用してWebページを解析しようとしています。私は次のようにユーザーエージェントを設定しようとします:

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」が追加された、指定したものです。この追加なしでユーザーエージェントを本当に設定する方法はありますか?

72
DiglettPotato

一方で、http.agentシステムプロパティを""に設定すると、うまくいくかもしれません(目の前にコードがありません)。

あなたは逃げるかもしれません:

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

ただし、起動時に値をキャッシュする場合は、実際にURLプロトコルハンドラーの初期化との競合が必要になる場合があります(実際、そうではないと思います)。

このプロパティは、JNLPファイル(6u10のアプレットで使用可能)およびコマンドラインでも設定できます。

-Dhttp.agent=

または、ラッパーコマンドの場合:

-J-Dhttp.agent=
60

明確にするために:setRequestProperty("User-Agent", "Mozilla ...")が正常に機能するようになり、最後にJava/xxを追加しません!少なくともJava 1.6.30では。

私はnetcat(ポートリスナー)でマシンをリッスンしました:

$ nc -l -p 8080

単にポートでリッスンするため、生のhttpヘッダーなど、要求されるものはすべて表示されます。

また、setRequestPropertyを使用せずに次のHTTPヘッダーを取得しました。

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

WITH 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());
    }

}
89
jens

少し変更されました Tom Hawtins への回答:

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

http://www.ivoa.net/forum/apps/0903/0610.htm

7
Karussell

私のための仕事addRequestPropertyでUser-Agentを設定します。

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");
3
Bachan Joseph

HTTPサーバーは、古いブラウザーとシステムを拒否する傾向があります。

ページ 技術ブログ(wh):最も一般的なユーザーエージェント は、セクションの現在のブラウザーのユーザーエージェントプロパティを反映しています "あなたのユーザーエージェントは:"、これはJava.net.URLConnectionのリクエストプロパティ「User-Agent」またはシステムプロパティ「http.agent」の設定に適用できます。

1
Sam Ginrich