当前位置: 首页 > 知识库问答 >
问题:

如何设置默认超时在Apache HttpClient 4.5?(流利)

须原
2023-03-14

我正在Java控制台应用程序中使用ApacheHttpClient 4.5(具有fluent接口)。我注意到,它的默认超时值似乎是无限的,但我必须为我发送的请求使用非无限超时值。我想对所有请求使用相同的超时值。

如何全局设置默认的连接超时和套接字超时值,以便不必在代码中发送请求的每个位置都设置它们?(记住我使用的是流畅的界面)

示例:

现在,在我的代码中发送请求的每个地方,我都会执行如下操作:(简单示例)

HttpResponse response = Request.Get(url)
   .connectionTimeout(CONNECTION_TIMEOUT) // <- want to get rid of this
   .sessionTimeout(SESSION_TIMEOUT)       // <- and this
   .execute()
   .returnResponse();

我想做的是,在我的程序开始时,一劳永逸地设置默认值。类似的东西:

SomeImaginaryConfigClass.setDefaultConnectionTimeout(CONNECTION_TIMEOUT);
SomeImaginaryConfigClass.setDefaultSessionTimeout(SESSION_TIMEOUT);

这样我就可以发送这样的请求

HttpResponse response = Request.Get(url).execute().returnResponse();

无需在每次调用上设置超时参数。

我在网上看到了一些答案,但它们要么是针对Apache HttpClient的旧版本(即不工作),要么是关于使用构建器或传递配置类,或者是其他对我来说太复杂的方法。我只想设置默认的超时值,没有比这更有趣的了。我在哪里做这个?

共有1个答案

淳于坚壁
2023-03-14

可以使用自定义执行器来执行此操作

RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(5000)
        .setSocketTimeout(5000)
        .build();
SocketConfig socketConfig = SocketConfig.custom()
        .setSoTimeout(5000)
        .build();
CloseableHttpClient client = HttpClients.custom()
        .setDefaultRequestConfig(requestConfig)
        .setDefaultSocketConfig(socketConfig)
        .build();

Executor executor = Executor.newInstance(client);
executor.execute(Request.Get("http://thishost/")).returnResponse();
executor.execute(Request.Get("http://thathost/")).returnResponse();

 类似资料:
  • 问题内容: 试图找到一种在Selenium Python WebDriver中为命令执行延迟设置最大时间限制的好方法。理想情况是: 会工作。我已经找到,但不确定是否会导致所需的行为。 如果有用,我们专门使用适用于Firefox的WebDriver。 编辑 按照@amey的回答,这可能会有用: 但是,我不清楚隐式等待是否同时适用于(这是所需的功能)和适用于。 非常感谢! 问题答案: 在python中

  • 问题内容: 我正在使用Hibernate对数据库进行一些大查询,有时会遇到超时问题。我想避免在每个或上手动设置超时。 我可以为Hibernate配置提供任何属性,为我运行的所有查询设置可接受的默认值吗? 如果没有,如何在Hibernate查询上设置默认超时值? 问题答案: JPA 2定义了 javax.persistence.query.timeout 提示以指定默认超时(以毫秒为单位)。Hibe

  • 我正在使用my.conf文件中的default_time_zone='+00:00'并重新启动mysql服务器。但默认时区仍然显示系统。

  • 问题内容: 我在同一包中有2个班级。这两个类都具有main方法。现在,我想构建一个jar文件。我想建立2个jar文件,这些文件使用不同的主要功能作为默认主要功能。 例如 如何在NetBeans IDE中进行操作? 我找到了答案。您可以在netbeans中轻松地做到这一点:1)右键单击项目>属性>运行>选择类frm并下拉列表。在netbeans中是如此简单。Netbeans摇摇欲坠! 问题答案: 在

  • 问题内容: 我在使用react-select时遇到问题。我使用redux表单,并且使我的react-select组件与redux表单兼容。这是代码: 这里是我如何渲染它: 但是问题是我的下拉菜单没有我希望的默认值。我做错了什么?有任何想法吗? 问题答案: 我猜你需要这样的东西:

  • 问题内容: 我可以在angularjs中使用默认值设置一个下拉列表, 如何使用来达到相同的效果?我胆战心惊, 但是没用。样品小提琴在这里 问题答案: 使用 为设定的默认值。 这是: 演示