2

Apache CommonsHttpClientv3.1を使用しています。私のすべてのリクエストは、1つのリクエストを除いてリクエストラインに正しい(デフォルトの)HTTPバージョン、つまりHTTP/1.1を持っています。

次のPostリクエストは、リクエストラインをHTTP/0.9として取得します。

server : port/cas/v1/tickets/TGT-1-sUqenNbqUzvkGSWW25lcbaJc0OEcJ6wg5DOj3XDMSwoIBf6s7i-cas-1
Body: service=*

httpクライアントコードをデバッグして、リクエストラインがHTTP / 1.1に設定されていることを確認しましたが、サーバー上では、リクエストがHTTP/0.9として送信されていることがわかります。

を使用してHTTPバージョンを明示的に設定しようとしましたHttpMethodParamsが、それは役に立ちません。誰かが何が間違っている可能性があるか考えていますか?

    HttpClient client = new HttpClient();
    HostConfiguration hc = client.getHostConfiguration();
    hc.setHost(new URI(url, false));

    PostMethod method = new PostMethod();
    method.setURI(new URI(url, false));

    method.getParams().setUriCharset("UTF-8");
    method.getParams().setHttpElementCharset("UTF-8");
    method.getParams().setContentCharset("UTF-8");
    method.getParams().setVersion(HttpVersion.HTTP_1_1);
    method.addParameter("service", URLEncoder.encode(service, "UTF-8"));
    method.setPath(contextPath + "/tickets/" + tgt);

    String  respBody = null;
    int statusCode = client.executeMethod(method);
    respBody = method.getResponseBodyAsString();
4

1 に答える 1

6

ヨアヒム・ザウアーに感謝します。私は問題を理解することができました。

Webscarab を Web プロキシとして使用していましたが、「継続ヘッダーを取得しましたが、前のヘッダー行がありませんでした」というメッセージが出力されました。オンラインで調べたところ、問題は複数行のリクエストラインにあることがわかりました。HTTP バージョンを明示的に 1.1 に設定していましたが、URL の末尾に '\r\n' があり、リクエストラインが Http/0.9 のように見えました。

Http/0.9 と Http/1.0 またはその他の上位プロトコルの違いは、0.9 には単純なリクエストライン「METHOD URL」があったことです。それ以降のバージョンでは、リクエスト行「METHOD URL HTTPVERSION」に Http バージョンも含まれています。

それが誰かを救うことを願っています!

于 2012-11-01T14:07:02.160 に答える