Http设置RequestConfig ,以修改 连接超时、 请求超时 、 读取超时为例

「爱情、让人受尽委屈。」 2022-05-23 07:59 1543阅读 0赞

今天在给http请求设置超时时间时,发现之前的方法已经过时了。所以就看了看源码,修改为最新方法。

在这里做个记录吧。

以get请求为例吧:

这是之前的没有设置请求超时时间:

  1. public static HttpResponse doGet(String host, String path,
  2. Map<String, String> headers,
  3. Map<String, String> querys)
  4. throws Exception {
  5. HttpClient httpClient = wrapClient(host,path);
  6. HttpGet request = new HttpGet(buildUrl(host, path, querys));
  7. for (Map.Entry<String, String> e : headers.entrySet()) {
  8. request.addHeader(e.getKey(), e.getValue());
  9. }
  10. return httpClient.execute(request);
  11. }

这个是设置之后的:

  1. public static HttpResponse doGet(String host, String path,
  2. Map<String, String> headers,
  3. Map<String, String> querys)
  4. throws Exception {
  5. HttpClient httpClient = wrapClient(host,path);
  6. HttpGet request = new HttpGet(buildUrl(host, path, querys));
  7. for (Map.Entry<String, String> e : headers.entrySet()) {
  8. request.addHeader(e.getKey(), e.getValue());
  9. }
  10. request.setConfig(setTimeOutConfig(request.getConfig()));
  11. return httpClient.execute(request);
  12. }
  13. /**
  14. * 设置 连接超时、 请求超时 、 读取超时 毫秒
  15. * @param requestConfig
  16. * @return
  17. */
  18. private static RequestConfig setTimeOutConfig(RequestConfig requestConfig){
  19. return RequestConfig.copy(requestConfig)
  20. .setConnectionRequestTimeout(60000)
  21. .setConnectTimeout(60000)
  22. .setSocketTimeout(10000)
  23. .build();
  24. }

我呢把这块抽了一个方法,只需要在执行请求之前将request的config重新设置就可以了。

下面我们简单看看源码:

这是RequestConfig.java

70

我们可以看到有很多的相关配置参数。

但是我们可以看到这些属性都是final类型的,也就是说我们并不能使用set方式为其赋值。同时,也没有一个public的构造方法。那么,我们怎么修改呢?

当然,它也为我们提供了相应的修改方式。下面我们就来看看:

70 1

我们看到,它里面有一个静态类Builder,在Builder里面也有这些属性,同时,我们可以发现,Builder为我们提供了set方法。

这就意味着我们可以修改这些属性的值了。那么,该如何来改呢?

在Builder的最后有一个build()方法,我们来看看

70 2

build方法为我们返回了一个RequestConfig对象。而且这个方法里为RequestConfig赋值为Builder的对应属性值。

所以,我们就可以先获得一个Builder对象,为其属性赋值,然后调用build方法得到我们想要的RequestConfig。

那么,Builder对象又该如何获取呢?

70 3

我们可以看到,RequestConfig为我们提供了两个静态方法获取Builder。

我们可以通过custom获取一个新的Builder对象,也可以通过copy方法获取一个赋有当前配置的Builder对象。

如此,我们就可以修改我们想要修改的RequestConfig配置了。

转载请务必保留此出处(原作者):https://blog.csdn.net/zhuzhezhuzhe1

版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。

https://blog.csdn.net/zhuzhezhuzhe1

发表评论

表情:
评论列表 (有 0 条评论,1543人围观)

还没有评论,来说两句吧...

相关阅读

    相关 请求超时

    请求超时原因 网络不稳定/网络慢导致请求发送不出去 请求已发送,服务器响应速度太慢(请求时间超过xhr,ajax,asiox设置的请求超时时间) 浏览器

    相关 redis排查读取超时连接超时

    最近公司现网查询速度极慢,原因是因为有一个调度频繁查询产品详情,经理安排进行优化 笔者第一时间想到的是使用缓存,但因为生产环境产品信息量将近上千条热点数据,为防止撑爆服务器