85

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

4

4 に答える 4

95

明確にするために:setRequestProperty("User-Agent", "Mozilla ...")今では問題なく動作java/xxし、最後に追加されません! 少なくとも Java 1.6.30 以降では。

私はnetcat(ポートリスナー)を使って自分のマシンでリッスンしました:

$ nc -l -p 8080

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

そして、setRequestProperty なしで次の http-headers を取得しました。

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

}
于 2012-03-22T18:55:20.250 に答える
75

手元にない場合は、http.agentシステムプロパティをに設定する""とうまくいく可能性があります(目の前にコードがありません)。

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

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

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

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

-Dhttp.agent=

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

-J-Dhttp.agent=
于 2010-03-27T15:52:54.360 に答える