0

Java を使用して HTTP リクエストを作成しようとしていますが、無効なメソッドを取得しており、その理由がわかりません。これが私のコードです:

String str = "GET / HTTP/1.1\r\nHost: " + this.url + "\r\n";
int i=r.nextInt(agents.length);
String uAgent = agents[i]; //agents is an array of user agents.
  str = str + "User-Agent: "+uAgent+"\r\n";
  str = str + "Content-Length: " + (int)(Math.random() * 1000.0D) + "\r\n"; //random content length for now
  str = str + "X-a: " + (int)(Math.random() * 1000.0D) + "\r\n"; //random

 HttpURLConnection con = (HttpURLConnection) new URL(this.url).openConnection();
 con.setRequestMethod(str);
 con.setConnectTimeout(5000); //set timeout to 5 seconds
 con.connect();
 System.out.print(".");

私が得ているエラーはこれです:

java.net.ProtocolException: Invalid HTTP method: GET / HTTP/1.1
Host: http://example.com/
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US)
Content-Length: 434
X-a: 660   
    at java.net.HttpURLConnection.setRequestMethod(HttpURLConnection.java:339)
    at jbot.HTTP.run(HTTP.java:88)

有効な方法を使用しているように見えるので、わかりません。

4

4 に答える 4

3

HTTP リクエスト メソッドは、「GET」、「POST」などの 1 つの単語だけです。その他の行は、 を使用して設定できるリクエスト ヘッダーですsetRequestProperty。例えば:

con.setRequestProperty("User-Agent", uAgent);
于 2013-01-25T03:57:06.327 に答える
2

わかりました。戻って、次のドキュメントを確認してくださいHttpUrlConnection

HttpUrlConnectionHTTP の TOP の抽象化です。これにより、HTTP 文字列を手動で記述する必要がなくなります。

setRequestMethodシンプルStringを必要とし、それが許可するものを正確に伝えます。使用する場合は、HTTP 行全体を手動で行う必要はありませんHttpUrlConnection(実際、GET がデフォルトであり、GET のメソッドを設定しないでください)。

HttpUrlConnectionで呼び出される「プロパティ」を設定できますsetRequestProperty

これは、単純なキーと値のペアを使用してヘッダーを設定するために使用するものです (ユーザー エージェントはヘッダーです)。パラメータについては、GET を使用しているため、URL (クエリ文字列) の一部になります。

作成したように、手動で HTTP サーバーに文字列を送信したい場合 (おそらくそうしたくないでしょうが、念のため)、 a で接続してSocket発射する必要があります (使用しないでください)。などのヘルパー ライブラリHttpUrlConnection)。

于 2013-01-25T03:55:00.320 に答える
0

ドキュメント(http://docs.oracle.com/javase/1.5.0/docs/api/java/net/HttpURLConnection.html#setRequestMethod(java.lang.String))によるとsetRequestMethod、メソッド、つまり「GET」のみが期待されます"、"POST"、"PUT" など。

あなたはこのようなものが欲しい:

URL serverAddress = new URL("http://localhost");
//set up out communications stuff
HttpURLConnection connection = null;

//Set up the initial connection
connection = (HttpURLConnection)serverAddress.openConnection();
connection.setRequestMethod("GET");
connection.setDoOutput(true);
connection.setReadTimeout(10000);

connection.connect();
于 2013-01-25T03:56:57.073 に答える
0

「GET、POST、HEAD、OPTIONS、PUT、DELETE、TRACE」、これらは次のメソッドを渡す有効な引数です。

void setRequestMethod(String method)

他のプロパティ(あなたの場合は User-Agent など)を設定するには、次のような方法を使用できます。

con.setRequestProperty("<Property-name>", <property-value>)

ありがとう、ハッピーコーディング!

于 2013-01-25T04:05:25.223 に答える