我正在尝试使用Apache HTTPClient 4.5.1来执行一些rest请求。不幸的是,每一秒的请求都会以“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();
之后,我像这样执行我的请求(在同一个 Http 客户端实例上):
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实例,一切都很好。在服务器端,我运行了一个野蝇8(和9)。对于第二个请求,我甚至看不到一个请求传入,所以在我看来,客户端甚至没有尝试。
知道我错过了什么/做错了什么吗?
感谢hotzst提示启用日志记录,我明白了:
服务器正在返回HTTP状态204(无内容),但仍发送了一些响应数据。HttpClient将这些响应数据作为NEXT请求的“响应中的垃圾”,这通过弄乱响应头来破坏它。将reservers响应代码更改为404可以解决我的问题。
当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常
Apache Kafka:分布式消息传递系统 Apache Storm:实时消息处理 我们如何在实时数据管道中使用这两种技术来处理事件数据? 在实时数据管道方面,我觉得两者做的工作是一样的。如何在数据管道上同时使用这两种技术?
我正在尝试向一个网站发送帖子请求。作为对POST请求的响应,我希望得到一些JSON数据。 使用Apache的HttpClient库,我可以毫无问题地做到这一点。响应数据是JSON,所以我只是解析它。 但是我不能在我的项目中使用HttpClient库。我需要能够用“just”HttpURLConnection做同样的事情。 但是HttpClient库有一些我无法理解的魔力。因为使用HttpURLCo
我正在玩ApacheCamel,在从“琐碎的示例”阶段过渡到“但有这些恼人的细节”阶段时遇到了一些问题。至关重要的是,如何进入并显式修改endpoint。 在这种情况下,我需要为超文本传输协议客户端设置一个auth cookie。我有一个cookie存储对象,但不知道如何强制客户端使用它。我试过使用,但没有公开cookie存储,而且它似乎也没有被调用。 我现在的代码: 并由以下人员调用: 知道我如
如何在基于网络的 HTTP 客户端中重试 HTTP 请求? 请考虑以下处理程序,如果收到 HTTP 响应代码 503,它将尝试在 1 秒后重试 HTTP 请求: 在本例中,当我写入通道时,管道中的其他处理程序会看到HttpObjects,但实际上不会再次执行HttpRequest——只接收到一个HttpResponse。 我认为在这种情况下我只是滥用了 Channel,我需要创建一个新的通道(表示
我在Apache Storm拓扑上运行了一个性能测试,并注意到kinesis-spout中的“failed”计数非常高(几乎占了元组的1/3)。这个数值是多少?