69


25

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

5 Answer


84


わかりやすくするために、setRequestPropertyは正常に機能します。 少なくとも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());
    }

}


57


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

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

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

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

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

-Dhttp.agent=

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

-J-Dhttp.agent=


7


Tom Hawtinsの回答を少し変更しました:

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


3


私の仕事は* addRequestPropertyでUser-Agentを設定します*

URL url = new 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


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

ページhttps://techblog.willshouse.com/2012/01/03/most-common-user-agents/[Tech Blog(wh):Most Common User Agents]は、セクションの現在のブラウザのuser-agentプロパティを反映しています_ "ユーザーエージェントは:" _です。これは、 `java.net.URLConnection`のリクエストプロパティ" User-Agent "またはシステムプロパティ" http.agent "を設定するために適用できます。