httpclientutil
httpclientutil copied to clipboard
一些建议想要交流
超时时间
问题
目前设置超时时间都是HCB.custom().timeout(xxx)的方式进行设置,如果是连接池的话,其设置的是该池中所有Http请求的超时时间。而如果我们想要以更低粒度的方式设置超时时间,也就是说为每个连接池的每个Http请求设置不同的超时时间,目前没有办法设置。
解决方案
- 添加HttpConfig对象设置超时时间的方法,后面在通过HttpRequestBase对象设置RequestConfig的方式进行设置。
- 为HttpConfig添加默认的RequestConfig对象,添加设置该对象的方法,这样粒度更大,用户想要自定义时能够更好的扩展。
执行请求,返回结果
问题
在HttpClientUtil执行Http请求的方法中,方法的粒度太小了,比如我想要Http响应头和Http body的话就没有办法同时拿到。
解决方案
- 添加粒度更大的接口进行处理Http请求,可以需要进行把HttpClientUtil执行请求的方法进行重构以便能够更好的使用。
第一个问题,HCB是集成自HttpClientBuilder的,可以直接调用setDefaultRequestConfig(RequestConfig config)方法进行设置。 第二个问题,HttpClientUtil中提供的方法是按Http协议中定义的方法实现的。除了增加了一个upload和down方法,在方法粒度不会做太多调整。 如果是想同时获取response Header和body。可以通过HttpConfig.headers(Header[] headers, boolean isReturnRespHeaders)方法。具体源码请看:https://github.com/Arronlong/httpclientutil/blob/master/src/main/java/com/arronlong/httpclientutil/common/HttpConfig.java#L131
您回答的第一点,调用setDefaultRequestConfig(RequestConfig config)方法进行设置,该设置httpclient设置默认的超时时间的方法,而当使用连接池的时候,由于所有的请求都是同一个httpclient,会使用默认的超时时间,而每个请求的超时时间是通过HttpRequest进行设置的。 第二点,返回的仅仅是header和body,而没有请求头(Status Line),在某些时候我们需要拿到其验证该请求是否是200请求然后进行跟进一步的操作。
第一,对于超时的问题的确存在。我会在新版本中作出修改。也欢迎你来提交pull request
第二,如果单想验证StatusCode,可以直接调用HttpClientUtil.status(config)这个方法进行验证。
暂时的确没有返回StatusLine的方法。其实就连通过HttpConfig返回Header都是不合理的方式。因为遇到多线程就会出现问题。不过既然的确有这方面的需求,我也会专门提供一个方法,类似于返回HttpResponse对象——HttpResult。
再次欢迎能提交pull request,毕竟个人精力有限。
在develop分支上,添加了以上的处理方案,https://github.com/Arronlong/httpclientutil/commit/c1554e834833a978767a4923cefd6237540bea7e
欢迎使用以下版本进行测试:
<dependency> <groupId>com.arronlong</groupId> <artifactId>httpclientutil</artifactId> <version>1.0.2-SNAPSHOT</version> </dependency>