java - 这些 HTTP IOExceptions 的原因可能是什么?
问题描述
我正在使用这样的 Java 代码在某个站点上执行查询:
String query( String query ){
HttpClient client = HttpClient.newHttpClient();
URI uri = ...;
HttpRequest request = HttpRequest.newBuilder()
.uri( uri )
.build();
HttpResponse<String> response;
try {
reqCounter++;
response = client.send( request, BodyHandlers.ofString() );
return response.body();
} catch (IOException ioe ) {
System.err.print( ioe.getMessage() );
} catch (InterruptedException ie) {
}
}
在一些非常成功的请求之后,一个接一个地,对同一个站点,抛出一个 IOException,显示一条消息
- “null”,经过不同数量的请求,可能是 50 或 150(仅几天后)
- “没有路由到主机”,总是在超过 900 个请求之后,几乎不超过 1000 个。我可以在长时间的咖啡休息后重新启动,可能是 10 到 15 分钟,一切顺利,直到下一次再见。
- “GOAWAY”,在不同数量的请求之后,少于 100 个,通常是在由于先前的原因在最后一次终止后仓促重启之后。
每次请求前 0.1 秒到 0.3 秒的睡眠无济于事,900 次请求后的长时间睡眠(10*60 秒)也不能避免 IOException。
大约 7 天前,我一直在向网站的维护者抱怨。他们否认在这方面有任何共谋。
有没有人见过这样的事情,在没有持续人工干预的情况下获得数千个请求的最佳策略是什么?
解决方案
推荐阅读
- c# - 将 app.config 文件中的 Nlog 配置作为嵌入式资源
- pandas - 熊猫得到一个带有“自定义描述”的数据框
- python - 如何将多行列表转换为单行列表?
- python - 我们可以使用电报 API auth.signUp 将用户注册到网络电报吗
- spring-boot - Spring Oauth2 - 自定义从 @RequestParam 到 @RequestBody 的 TokenEndpoint
- javafx - 使用 javafx PrinterJob 打印 ListView
- c# - 无效的十进制验证
- windows - 如何以管理员身份以编程方式运行 PowerShell?
- node.js - “npm install”和“yarn install”都以错误告终
- android - 在Android中录制视频时显示textview