httpclientutil icon indicating copy to clipboard operation
httpclientutil copied to clipboard

一些建议想要交流

Open kanyuxia opened this issue 6 years ago • 4 comments

超时时间

问题

目前设置超时时间都是HCB.custom().timeout(xxx)的方式进行设置,如果是连接池的话,其设置的是该池中所有Http请求的超时时间。而如果我们想要以更低粒度的方式设置超时时间,也就是说为每个连接池的每个Http请求设置不同的超时时间,目前没有办法设置。

解决方案

  1. 添加HttpConfig对象设置超时时间的方法,后面在通过HttpRequestBase对象设置RequestConfig的方式进行设置。
  2. 为HttpConfig添加默认的RequestConfig对象,添加设置该对象的方法,这样粒度更大,用户想要自定义时能够更好的扩展。

执行请求,返回结果

问题

在HttpClientUtil执行Http请求的方法中,方法的粒度太小了,比如我想要Http响应头和Http body的话就没有办法同时拿到。

解决方案

  1. 添加粒度更大的接口进行处理Http请求,可以需要进行把HttpClientUtil执行请求的方法进行重构以便能够更好的使用。

kanyuxia avatar Aug 20 '18 12:08 kanyuxia

第一个问题,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

Arronlong avatar Sep 07 '18 09:09 Arronlong

您回答的第一点,调用setDefaultRequestConfig(RequestConfig config)方法进行设置,该设置httpclient设置默认的超时时间的方法,而当使用连接池的时候,由于所有的请求都是同一个httpclient,会使用默认的超时时间,而每个请求的超时时间是通过HttpRequest进行设置的。 第二点,返回的仅仅是header和body,而没有请求头(Status Line),在某些时候我们需要拿到其验证该请求是否是200请求然后进行跟进一步的操作。

kanyuxia avatar Sep 11 '18 08:09 kanyuxia

第一,对于超时的问题的确存在。我会在新版本中作出修改。也欢迎你来提交pull request

第二,如果单想验证StatusCode,可以直接调用HttpClientUtil.status(config)这个方法进行验证。

暂时的确没有返回StatusLine的方法。其实就连通过HttpConfig返回Header都是不合理的方式。因为遇到多线程就会出现问题。不过既然的确有这方面的需求,我也会专门提供一个方法,类似于返回HttpResponse对象——HttpResult。

再次欢迎能提交pull request,毕竟个人精力有限。

Arronlong avatar Sep 11 '18 14:09 Arronlong

在develop分支上,添加了以上的处理方案,https://github.com/Arronlong/httpclientutil/commit/c1554e834833a978767a4923cefd6237540bea7e 欢迎使用以下版本进行测试: <dependency> <groupId>com.arronlong</groupId> <artifactId>httpclientutil</artifactId> <version>1.0.2-SNAPSHOT</version> </dependency>

Arronlong avatar Sep 12 '18 01:09 Arronlong