【问题标题】:Does HttpsURLConnection.getInputStream() makes automatic retries?HttpsURLConnection.getInputStream() 会自动重试吗?
【发布时间】:2012-09-11 06:28:38
【问题描述】:

我正在使用 HttpsURLConnection 向服务器发出服务请求,如下面的代码:

URL url = new URL("service/url");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setConnectionTimeout(300000);
connection.setReadTimeout(300000);
parse (connection.getInputStream());

服务有时可能需要更长的时间,所以理想情况下我应该期待超时异常,但客户端正在重试并再次发送相同的请求。有没有办法明确禁用任何类型的重试?而且我什至不确定设置的超时方法是否有什么不同。

我使用的是 Java 1.6

更新
我尝试了 connect() 和 getResponseCode() 而不是 getInputStream() 但行为相同:

URL url = new URL("service/url");
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setConnectionTimeout(300000);
connection.setReadTimeout(300000);
connection.connect();
connection.getResponseCode();

即使这是发出 2 个请求。

更新
HttpClient 修复了这个问题。在 HttpClient 中,您可以将重试显式设置为 false

【问题讨论】:

  • 你是如何推断它正在重试的?
  • 服务器日志中出现了 2 个完全相同的请求。由于重复请求,请求失败。
  • 请使用fiddler 之类的工具来检查这是否是客户端问题。

标签: java timeout httpsurlconnection


【解决方案1】:

你不应该打电话给openConnection()connect(),直接打电话给openConnection()

【讨论】:

    猜你喜欢
    • 2019-05-13
    • 2016-11-04
    • 2017-02-25
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-04-29
    • 2010-12-02
    • 2013-02-04
    相关资源
    最近更新 更多