Http设置RequestConfig ,以修改 连接超时、 请求超时 、 读取超时为例
今天在给http请求设置超时时间时,发现之前的方法已经过时了。所以就看了看源码,修改为最新方法。
在这里做个记录吧。
以get请求为例吧:
这是之前的没有设置请求超时时间:
public static HttpResponse doGet(String host, String path,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host,path);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
return httpClient.execute(request);
}
这个是设置之后的:
public static HttpResponse doGet(String host, String path,
Map<String, String> headers,
Map<String, String> querys)
throws Exception {
HttpClient httpClient = wrapClient(host,path);
HttpGet request = new HttpGet(buildUrl(host, path, querys));
for (Map.Entry<String, String> e : headers.entrySet()) {
request.addHeader(e.getKey(), e.getValue());
}
request.setConfig(setTimeOutConfig(request.getConfig()));
return httpClient.execute(request);
}
/**
* 设置 连接超时、 请求超时 、 读取超时 毫秒
* @param requestConfig
* @return
*/
private static RequestConfig setTimeOutConfig(RequestConfig requestConfig){
return RequestConfig.copy(requestConfig)
.setConnectionRequestTimeout(60000)
.setConnectTimeout(60000)
.setSocketTimeout(10000)
.build();
}
我呢把这块抽了一个方法,只需要在执行请求之前将request的config重新设置就可以了。
下面我们简单看看源码:
这是RequestConfig.java
我们可以看到有很多的相关配置参数。
但是我们可以看到这些属性都是final类型的,也就是说我们并不能使用set方式为其赋值。同时,也没有一个public的构造方法。那么,我们怎么修改呢?
当然,它也为我们提供了相应的修改方式。下面我们就来看看:
我们看到,它里面有一个静态类Builder,在Builder里面也有这些属性,同时,我们可以发现,Builder为我们提供了set方法。
这就意味着我们可以修改这些属性的值了。那么,该如何来改呢?
在Builder的最后有一个build()方法,我们来看看
build方法为我们返回了一个RequestConfig对象。而且这个方法里为RequestConfig赋值为Builder的对应属性值。
所以,我们就可以先获得一个Builder对象,为其属性赋值,然后调用build方法得到我们想要的RequestConfig。
那么,Builder对象又该如何获取呢?
我们可以看到,RequestConfig为我们提供了两个静态方法获取Builder。
我们可以通过custom获取一个新的Builder对象,也可以通过copy方法获取一个赋有当前配置的Builder对象。
如此,我们就可以修改我们想要修改的RequestConfig配置了。
转载请务必保留此出处(原作者):https://blog.csdn.net/zhuzhezhuzhe1
版权声明:本文为原创文章,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。
https://blog.csdn.net/zhuzhezhuzhe1
还没有评论,来说两句吧...