3

私は次のコードを使用して単純なHTTPリクエストを送信しています:

try
{
    Socket  s = new Socket ();
    s.bind    (new InetSocketAddress (ipFrom, 0));
    s.connect (new InetSocketAddress (ipTo,   80), 1000);

    PrintWriter     writer = new PrintWriter    (s.getOutputStream ());
    BufferedReader  reader = new BufferedReader (new InputStreamReader (s.getInputStream ()));

    writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 
    writer.flush ();

    s     .close ();
    reader.close ();
    writer.close ();
}

ただし、ご覧のとおり、カスタムHEADERは送信しません。カスタムHEADERを送信するには何を追加する必要がありますか?

4

6 に答える 6

6

HTTPプロトコルを自分で実装しようとしないでください。

ApacheによるHttpComponentsを使用します。

(またはその古くて少し使いやすいバージョン-HttpClient

于 2010-02-06T18:59:44.497 に答える
5

あなたが書くとき

writer.print ("GET " + szUrl + " HTTP/1.0\r\n\r\n"); 

この\r\n\r\nビットは、ライン フィード/キャリッジ リターンを送信して行を終了させ、次に別のヘッダーを送信してヘッダーがなくなったことを示します。これは、HTTP と電子メールの両方の形式の標準です。つまり、空白行はヘッダーの終わりを示します。追加のヘッダーを追加するには、完了するまでそのシーケンスを送信しないでください。代わりに次のことができます

writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
writer.print ("header1: value1\r\n"); 
writer.print ("header2: value2\r\n"); 
writer.print ("header3: value3\r\n"); 
// end the header section
writer.print ("\r\n"); 
于 2010-02-06T19:11:08.527 に答える
1

自分でHTTPを実装するのではなく、Bozhoが述べたようにHttpComponentsを試すことを提案したとしても、これがカスタムヘッダーを追加する方法になります。

 writer.print ("GET " + szUrl + " HTTP/1.0\r\n"); 
 writer.print ("X-MyOwnHeader: SomeValue\r\n");
于 2010-02-06T19:03:08.697 に答える
1

http接続に使用するためにすでに準備されているクラスを使用する必要があります。これHTTPUrlConnectionは、の子でUrlConnectionあり、このメソッドを持っています。

void setRequestProperty(String key, String value)

リクエストのパラメータを設定するために使用する必要があります(HEADERフィールドなど)。参照用にここを確認してください

于 2010-02-06T19:03:14.000 に答える
1

URLConnectionも表示されます。

https://docs.oracle.com/javase/1.5.0/docs/api/java/net/URLConnection.html

于 2010-02-06T19:03:32.540 に答える
0

どうしても手作業で行う必要がある場合は、各ヘッダーが独自の行にあるこの形式に従う必要があります。

名前:値

HTTP仕様のヘッダー形式を調べてください。

http://www.w3.org/Protocols/HTTP/1.0/draft-ietf-http-spec.html#Message-Headers

于 2010-02-06T19:01:42.970 に答える