質問

Apache Commons HttpClient 3.1を使用していますが、SunのHttpURLConnectionがストリームから100 Continuesを落とすことがわかりました。

したがって、Sunのコードによって明らかにドロップされるため、100の継続を取得できないようです。

HttpClient 4.0に移行することはできません。既存のコードに多くの変更が必要になるため、ソリューションは3.1または競合しないものでなければなりません。

アイデアはありますか

ありがとう

役に立ちましたか?

解決

解決策を見つけました!

processStatusLineをオーバーライドし、ステータス100を確認します。

最初の100が期待されていることを思い出してください(サーバーはPOSTを続行できると言っています)。私の場合は、これを無視しても安全です。このようにして、サーバーが応答しているすべての情報を取得します。

public class Counting100PostMethod extends PostMethod {
Logger log = Logger.getLogger(Counting100PostMethod.class);
boolean first100 = true;

public Counting100PostMethod() {
    super();
}

public Counting100PostMethod(String s) {
    super(s);
}

@Override
protected void processStatusLine(HttpState httpState, HttpConnection httpConnection) {
    super.processStatusLine(httpState, httpConnection);
    int status = getStatusCode();
    if (status == 100) {
        if (first100) {
            first100 = false;
        } else {
            // can now increment counter
            log.debug("Increment counter");
        }
    }
}

他のヒント

この動作は予想され、この問題によって拒否されたようです: http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id = 4396798

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top