2

コード

public HttpRequest(BufferedReader from) {
String firstLine = "";

try {
    firstLine = from.readLine();
} catch (IOException e) {
    System.out.println("Error reading request line: " + e);
}

String[] tmp = firstLine.split(" ");
method = tmp[0];
URI = tmp[1];
version = tmp[2];
System.out.println("URI is: " + URI);

if(method.equals("POST")){
    try {
        String line = from.readLine();
        while (line.length() != 0) {
            headers += line + CRLF;
            if (line.startsWith("Host:")) {
                tmp = line.split(" ");
                if (tmp[1].indexOf(':') > 0) {
                    String[] tmp2 = tmp[1].split(":");
                    host = tmp2[0];
                    port = Integer.parseInt(tmp2[1]);
                } else {
                    host = tmp[1];
                    port = HTTP_PORT;
                }
            }
            line = from.readLine();
        }
        headers += "Connection: close" + CRLF;
        headers += CRLF;
    } 
    catch (IOException e) {
        System.out.println("Error reading from socket: " + e);
        return;
    }       
}
else {
    System.out.println("Error: Method not supported");
    return;
}

System.out.println("Host to contact is: " + host + " at port " + port); 
    }

問題

Javaを使用してプロキシサーバーを作成しています。

上記のコードは、HTTP POST リクエストを処理します。POST ヘッダーを正常に読み取り、コマンド プロンプトに出力しますが、本文がありません。

私のコードを見て問題を確認できますか? ありがとう。

(注: 問題がなかったので、GET の部分は除外しました。)

結果

結果

結果

4

2 に答える 2

0

これは、プロキシ サーバーの書き方ではありません。プロキシ サーバーは次のことだけを行う必要があります。

  1. 着信接続を受け入れます。接続ごとに:
  2. HTTP CONNECT リクエストを読み取ります。
  3. CONNECT 要求で指定されたターゲット ホストに接続し、適切な応答をクライアントに送信します。
  4. 接続が成功した場合は、アップストリーム サーバーとダウンストリーム クライアントの間で双方向に同時にバイトをコピーします。
  5. 一方向で EOS を読み取る場合は、出力用に反対側のソケットをシャットダウンします。
  6. 両方向でシャットダウンしたら、両方のソケットを閉じます。

それでおしまい。POST リクエストの解析やその他の必要なものはありません。リーダーでさえありません。

于 2012-10-04T07:37:33.233 に答える