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」が追加された、指定したものです。この追加なしでユーザーエージェントを本当に設定する方法はありますか?
一方で、http.agent
システムプロパティを""
に設定すると、うまくいくかもしれません(目の前にコードがありません)。
あなたは逃げるかもしれません:
System.setProperty("http.agent", "");
ただし、起動時に値をキャッシュする場合は、実際にURLプロトコルハンドラーの初期化との競合が必要になる場合があります(実際、そうではないと思います)。
このプロパティは、JNLPファイル(6u10のアプレットで使用可能)およびコマンドラインでも設定できます。
-Dhttp.agent=
または、ラッパーコマンドの場合:
-J-Dhttp.agent=
明確にするために: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());
}
}
少し変更されました Tom Hawtins への回答:
System.setProperty("http.agent", "");
私のための仕事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");
HTTPサーバーは、古いブラウザーとシステムを拒否する傾向があります。
ページ 技術ブログ(wh):最も一般的なユーザーエージェント は、セクションの現在のブラウザーのユーザーエージェントプロパティを反映しています "あなたのユーザーエージェントは:"、これはJava.net.URLConnection
のリクエストプロパティ「User-Agent」またはシステムプロパティ「http.agent」の設定に適用できます。