[英]Every second request using Apache HTTPClient fails
我正在嘗試使用 Apache HTTPClient 4.5.1 來做一些休息請求。 不幸的是,每第二個請求都以“java.net.SocketTimeoutException: Read timed out”結束(如果未設置套接字超時,則永遠掛起)。
我正在像這樣構建我的客戶端:
ConnectionSocketFactory sf = new PlainConnectionSocketFactory();
Registry<ConnectionSocketFactory> r = RegistryBuilder.<ConnectionSocketFactory> create()
.register("http", sf)
.build();
Lookup<AuthSchemeProvider> authProviders = RegistryBuilder.<AuthSchemeProvider> create()
.register(AuthSchemes.BASIC, (AuthSchemeProvider) new BasicSchemeFactory())
.build();
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(r);
CredentialsProvider cp = new BasicCredentialsProvider();
cp.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user", "pass"));
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(15000)
.setConnectionRequestTimeout(15000)
.setSocketTimeout(15000)
.build();
this.client = HttpClients.custom()
.setConnectionManager(cm)
.setDefaultCredentialsProvider(cp)
.setDefaultAuthSchemeRegistry(authProviders)
.setDefaultRequestConfig(requestConfig)
.build();
之后我做我這樣的請求(在同一個 HttpClient 實例上):
HttpDelete delete = new HttpDelete(uri);
HttpClientContext context = HttpClientContext.create();
CloseableHttpResponse response = this.client.execute(request, context);
try {
int statusCode = response.getStatusLine().getStatusCode();
return statusCode;
}
finally {
response.close();
}
如果我開始為每個請求使用一個新的 HttpClient 實例,一切正常。 在服務器端,我有一個 wildfly 8(還有 9)在運行。 對於第二個請求,我什至看不到請求傳入,因此在我看來,客戶端甚至沒有嘗試。
關於我遺漏/做錯了什么的任何想法?
感謝hotzst提示啟用日志記錄,我想通了:
服務器正在返回 HTTP 狀態 204(無內容),但還是發送了一些響應數據。 HttpClient 將這些響應數據作為 NEXT 請求的“響應中的垃圾”獲取,這通過弄亂響應標頭來破壞它。 將儲備者響應代碼更改為 404 可以解決我的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.