サーバレスポンスボディは "[]"で、Content-Length = 0.クライアントが上記応答ボディを読み込もうとすると、常に "-1"を返します。また、私がサーバーレスポンスを傍受し、Content-Lengthを "2"に変更すると、すべて動作します。 Content-Length = 0のときにapache httpクライアントが-1を返しますが、実際にレスポンスボディが空ではないという結論を出すことができます。 Content-lengthが間違っていてもレスポンス本文を読むことができる回避策を探しています。つまり、Content-Lengthヘッダーの値を無視するようにhttpクライアントを設定できますか?サーバーを変更する機会がなく、何らかの理由でHttpUrlConnectionを使用することができません。してください、任意の提案。apache httpクライアントで0のコンテンツ長ヘッダを無視する方法
0
A
答えて
1
障害のある問題Content-length
は、HttpClientが応答が終了したときを認識しないため、キープアライブ接続の場合にこの接続を介して次の要求を中断します。 最も簡単な方法は、org.apache.http.impl.entity.LaxContentLengthStrategyを拡張し、ヘッダーが "0"のときに内容の長さ "2"を返すようにします。ただし、長さが実際に0の場合、スレッドは待機しますソケットからの続きを読む:
class MyLaxContentLengthStrategy extends LaxContentLengthStrategy{
public long determineLength(final HttpMessage message) throws HttpException {
final Header contentLengthHeader = message.getFirstHeader(HTTP.CONTENT_LEN);
if (contentLengthHeader != null) {
long contentlen = -1;
final Header[] headers = message.getHeaders(HTTP.CONTENT_LEN);
for (int i = headers.length - 1; i >= 0; i--) {
final Header header = headers[i];
try {
contentlen = Long.parseLong(header.getValue());
break;
} catch (final NumberFormatException ignore) {
}
// See if we can have better luck with another header, if present
}
if (contentlen == 0) {
return 2;
}
}
return super.determineLength(message);
}
}
: http://mail-archives.apache.org/mod_mbox/hc-httpclient-users/201301.mbox/%[email protected]%3E それは非常に簡単です4.4ので:
ManagedHttpClientConnectionFactory cliConnFactory = new ManagedHttpClientConnectionFactory(
null, null, null,
new MyLaxContentLengthStrategy());
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(cliConnFactory);
HttpClients.custom
.....
.setConnectionManager(cm)
.build();
だから、あなたが実際に必要としない場合"[]"を含む本体を使用すると、この接続を閉じるようにHttpClientに指示できます。失敗した応答を放棄する。あなたはこのように設定することができます
class MyConnectionReuseStrategy extends DefaultClientConnectionReuseStrategy{
@Override
public boolean keepAlive(final HttpResponse response, final HttpContext context) {
final HttpRequest request = (HttpRequest) context.getAttribute(HttpCoreContext.HTTP_REQUEST);
if (request != null) {
final Header[] contLenHeaders = request.getHeaders(HttpHeaders.CONTENT_LENGTH);
for(Header h : contLenHeaders){
if("0".equalsIgnoreCase(h.getValue())){
return false;
}
}
}
return super.keepAlive(response, context);
}
}
:これは、このようなものでorg.apache.http.impl.client.DefaultClientConnectionReuseStrategyをオーバーライドすることによって行うことができます
HttpClients.custom
.....
.setConnectionReuseStrategy(new MyConnectionReuseStrategy())
.build();
関連する問題
- 1. akkaのhttpクライアントで最大コンテンツ長を設定する方法は?
- 2. JAXWSがSOAP応答でコンテンツ長ヘッダを送信する方法
- 3. コンテンツの長さとその他のHTTPヘッダ?
- 4. Acumatica:CSVデータプロバイダ - ヘッダの行を無視する
- 5. ソーベルエッジ検出でNaNまたは0を無視する方法
- 6. ApacheでHTTP 1.0プロトコルを無効にする方法は?
- 7. Apache Maven GPGプラグインのエラーを無視する方法
- 8. Apache Olingoでフィールドを無視する
- 9. CGI使用時にperlでHTTPヘッダを取得する方法
- 10. コンテンツに基づいてフォルダを無視する方法
- 11. のApache HTTPクライアントPOSTが500
- 12. Apache HTTPクライアントのクッキー - Java
- 13. jQueryオートコンプリート無視0
- 14. AXIS2クライアントでホスト名検証またはセットアップ検証を無視する方法
- 15. HTTPにヘッダを追加投稿コンテンツ
- 16. java再生フレームワークhttpリクエストでコンテンツ長のヘッダーを設定する
- 17. wso2esb - HTTPリクエストからの冗長ヘッダ
- 18. http2 apache httpクライアントの動作例http
- 19. y = 0の点を無視する
- 20. Prometheus + blackboxコンポーネント - >個別のチェックなしでHTTPコンテンツを監視する方法
- 21. Webアプリケーション(マルチスレッド)のためのapache httpクライアントv3.0の設定方法
- 22. HTTPでJSONコンテンツをリクエストする方法
- 23. Apache Http非同期クライアント
- 24. Apacheで302のリダイレクトにヘッダを追加する方法は?
- 25. Apache HTTPクライアントのプロパティとの接続を解除する方法は?
- 26. Apacheで静的コンテンツを持つカスタムのファイルごとのヘッダ
- 27. C#SslStreamでクライアント証明書の検証を無視する方法
- 28. Apacheがカスタムモジュールを無視する
- 29. ApacheがDocumentRootを無視する
- 30. SVN無視 - ディレクトリの内容を無視する方法