http://hc.apache.org/
阿帕奇的开源项目。用于Http通信。
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.1</version> </dependency>
1.client
org.apache.http.client.HttpClient
接口。
CloseableHttpClient org.apache.http.impl.client.HttpClients.createDefault()
此方法可以拿到HttpClient对象。它是线程安全的。
2.request
org.apache.http.HttpRequest
接口。实现类有HttpGet、HttpPost等。
org.apache.http.client.methods.HttpUriRequest
继承了HttpRequest接口的接口。
void org.apache.http.message.AbstractHttpMessage.addHeader(String name, String value)
添加请求的头部信息。
org.apache.http.client.methods.HttpGet
代表HttpGet请求。
org.apache.http.client.methods.HttpPost
代表HttpPost请求。
2.1 get请求
org.apache.http.client.methods.HttpGet.HttpGet(String uri)
HttpGet请求的构造函数。
2.2 post请求
org.apache.http.client.methods.HttpPost.HttpPost(String uri)
HttpPost请求的构造函数。
org.apache.http.entity.StringEntity.StringEntity(String string)
http报文body的格式是字符串。用于构造json、xml类post请求。
3.设置参数
Builder org.apache.http.client.config.RequestConfig.custom()
拿到builder。
Builder org.apache.http.client.config.RequestConfig.Builder.setSocketTimeout(int socketTimeout)
设置socket链接超时。
Builder org.apache.http.client.config.RequestConfig.Builder.setConnectionTimeout(int connectionRequestTimeout)
设置http连接超时。socket超时是http超时的充分不必要条件。
Builder org.apache.http.client.config.RequestConfig.Builder.setConnectionRequestTimeout(int connectionRequestTimeout)
设置请求发出前的超时时间。适用于用连接池,连接池占满的情况。
RequestConfig org.apache.http.client.config.RequestConfig.Builder.build()
至此拿到了RequestConfig 对象。
void org.apache.http.client.methods.HttpRequestBase.setConfig(RequestConfigconfig)
设置连接超时等在内的参数。RequestConfig对象的生成见下行。
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(2000).build();
4.execute
CloseableHttpResponse org.apache.http.impl.client.CloseableHttpClient.execute(HttpUriRequest request)
执行请求并返回结果,是同步函数,需要等待。
5.response
org.apache.http.client.methods.CloseableHttpResponse
接口。
StatusLine org.apache.http.HttpResponse.getStatusLine()
获取状态栏。
HttpEntity org.apache.http.HttpResponse.getEntity()
获取消息实体。
InputStream org.apache.http.HttpEntity.getContent()
获取内容。如果是文本数据,通常这样来拿。
Scanner scanner = new Scanner(instream, "utf-8");
void org.apache.http.util.EntityUtils.consume(HttpEntity entity)
调用HttpEntity.getContent()就得到了InputStream,此方法用于把流消费完,然后关掉这个InputStream。