HttpClient的学习笔记

HttpClient的学习笔记

1.定义

​ HttpClient是Apache中的一个开源项目。它实现了HTTP标准中Client端的所有功能。使用它能够很容易地进行Http信息的传输。

​ 使用传统JDK自带的URLConnnection是有些不方便的。所以我们使用HttpClient。HttpClient是Apache Jackarta common下的小项目,可以用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。

HttpClient的学习笔记_第1张图片

2.特性

  1. 基于标准、纯净的Java语言。实现了Http 1.0 和 Http 1.1
  2. 以可扩展的面向对象的结构实现了Http全部方法(GET、POST、PUT、DELETE、HEAD、OPTIONS and TRACE)
  3. 支持HTTPS协议
  4. 通过Http代理建立透明的连接
  5. 利用CONNECT方法通过HTTP代理建立隧道的https连接
  6. Basic,Digese,NTLMv1,NTLMv2,NTLM2 Session,SNPNEGO/Rerberos认证方案
  7. 插件式的自定义认证方案
  8. 便捷可靠的套接字工厂使它更容易地使用第三方解决方案
  9. 连接管理器支持多线程应用,支持设置最大连接数,同时支持设置每个主机的最大连接数,发现并关闭过期的连接。
  10. 自动处理set-cookie中的cookie
  11. 插件式的自定义cookie策略
  12. Request的输出流可以避免流中内容直接缓冲到socket服务器
  13. Responce的输入流可以有效的从socket服务器直接读取相应内容
  14. 在http 1.0 和http 1.1 中,利用 keepAlive 保持持久连接
  15. 直接获取服务器发送的response code 和headers
  16. 设置连接超时的能力
  17. 实验性的支持http1.1 respon caching
  18. 源代码基于Apache License 可免费获取。

3.使用依赖

// apche httpclient的maven依赖
<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.2</version>
</dependency>

4.使用步骤

使用HttpClient发送请求,接受响应很简单,一般需要如下几步:

  1. 创建HttpClient对象
  2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送post请求,创建HttpPost对象
  3. 如果需要发送请求参数,可调用HttpGet、HttpPost共同的setParamx(HetpParamx params)方法来添加请求参数;对于HttpPost对象而言,也可调用setEntity(HttpEntity entity)方法来设置请求参数。
  4. 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponce.
  5. 调用HttpResponse的getAllHeaders( )、getHeaders(String name)等方法可获取服务器的相应头;调用HttpResponse的getEntity( ) 方法可获取HttpEntity对象,该对象包含了服务器的响应内容。程序可通过该对象获取服务器的响应内容。
  6. 释放连接。无论执行方法是否成功,都必须释放连接

5.一些类及方法的解释

英文API网址:https://javadoc.io/doc/org.apache.httpcomponents/httpclient/latest/index.html

1.HttpClient: public interface HttpClient

​ 这个接口仅代表Http请求执行的最基本的契约。它对请求执行过程没有施加任何限制或特定细节,而将状态管理、身份验证和重定向细节留给单独的实现。

方法(常用):

execute(HttpUriRequest request):使用默认上下文执行Http请求。

2.HttpClientBuilder: public class HttpClientBuilder

​ CloseableHttpClient实例的构建器。当特定成分(一些设置)没有显示设置时,该类将使用其默认实现。当在调用build()之前调用useSystemProperties()方法时,在配置默认实现时将考虑系统属性

方法(常用):

addInterceptorFirst(org.apache.http.HttpRequestInterceptor itcp):将此协议拦截器添加到协议处理列表的头部。参数:HttpRequestInterceptor/HttpResponseInterceptor

addInterceptorLast(org.apache.http.HttpRequestInterceptor itcp): 将此协议拦截器添加到协议处理列表的尾部。参数同上

build():public CloseableHttpClient build()

create():public static HttpClientBuilder create()

[createMainExec](https://javadoc.io/static/org.apache.httpcomponents/httpclient/4.5.13/org/apache/http/impl/client/HttpClientBuilder.html#createMainExec(org.apache.http.protocol.HttpRequestExecutor, org.apache.http.conn.HttpClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.conn.ConnectionKeepAliveStrategy, org.apache.http.protocol.HttpProcessor, org.apache.http.client.AuthenticationStrategy, org.apache.http.client.AuthenticationStrategy, org.apache.http.client.UserTokenHandler))(org.apache.http.protocol.HttpRequestExecutor requestExec, HttpClientConnectionManager connManager, org.apache.http.ConnectionReuseStrategy reuseStrategy, ConnectionKeepAliveStrategy keepAliveStrategy, org.apache.http.protocol.HttpProcessor proxyHttpProcessor, AuthenticationStrategy targetAuthStrategy, AuthenticationStrategy proxyAuthStrategy, UserTokenHandler userTokenHandler):生成ClientExecChain的一个实例,用作主执行器。

disableAuthCaching():禁用身份验证方案缓存。

disableAutomaticRetries():禁用自动请求恢复和重新执行。

disableConnectionState():禁用连接状态跟踪。

setBackoffManager(BackoffManager backoffManager):分配BackoffManager实例。

setConnectionManagerShared(boolean shared):定义要由多个客户端实例共享的连接管理器。

[setConnectionTimeToLive](https://javadoc.io/static/org.apache.httpcomponents/httpclient/4.5.13/org/apache/http/impl/client/HttpClientBuilder.html#setConnectionTimeToLive(long, java.util.concurrent.TimeUnit))(long connTimeToLive, TimeUnit connTimeToLiveTimeUnit):设置持久连接的最大存活时间

setDefaultConnectionConfig(org.apache.http.config.ConnectionConfig config):分配默认ConnectionConfig。

setDefaultHeaders(Collection defaultHeaders):指定默认的请求头值。

setMaxConnPerRoute(int maxConnPerRoute):分配每个路由值的最大连接。

setMaxConnTotal(int maxConnTotal):指定最大的总连接值。

setProxy(org.apache.http.HttpHost proxy):指定默认的代理值。

useSystemProperties():在创建和配置默认实现时使用系统属性。

3.**HttpClients:**public class HttpClients

用于CloseableHttpClient实例的方法工厂。

方法(常用):

createDefault():使用默认配置创建CloseableHttpClient实例。

createMinimal():创建实现最基本的HTTP协议支持的CloseableHttpClient实例。可选参数:HttpClientConnectionManager

createSystem():创建基于系统属性的默认配置的CloseableHttpClient实例。

custom():创建用于构建自定义CloseableHttpClient实例的构建器对象。

4. **HttpGet:**public class HttpGet

​ GET方法意味着检索由Request-URI标识的任何信息(以实体的形式)。如果Request-URI指向一个产生数据的过程,那么在响应中返回的应该是产生的数据,而不是过程的源文本,除非该文本恰好是过程的输出。

方法(常用):

HttpGet():构造方法

HttpGet(String uri):构造方法

HttpGet(URI uri):构造方法

方法继承自类org.apache.http.client.methods.HttpRequestBase:getConfig, getProtocolVersion, getRequestLine, getURI, releaseConnection, setConfig, setProtocolVersion, setURI, started, toString

方法继承自类org.apache.http.message.AbstractHttpMessage:addHeader, addHeader, containsHeader, getAllHeaders, getFirstHeader, getHeaders, getLastHeader, getParams, headerIterator, headerIterator, removeHeader, removeHeaders, setHeader, setHeader, setHeaders, setParams

5.CloseableHttpClient:

```java

@Contract(threading=SAFE)
public abstract class CloseableHttpClient
extends Object
implements HttpClient, Closeable
```

​ HttpClient的基本实现,它也实现了Closeable。

方法(常用):

execute(HttpUriRequest request):使用默认上下文执行HTTP请求。

6.CloseableHttpResponse:

public interface CloseableHttpResponse

​ HttpResponse接口的扩展版本,它也扩展了Closeable。

方法(常用):

方法继承自接口org.apache.http.HttpResponse:getEntity, getLocale, getStatusLine, setEntity, setLocale, setReasonPhrase, setStatusCode, setStatusLine, setStatusLine, setStatusLine

方法继承自接口org.apache.http.HttpMessage:

addHeader, addHeader, containsHeader, getAllHeaders, getFirstHeader, getHeaders, getLastHeader, getParams, getProtocolVersion, headerIterator, headerIterator, removeHeader, removeHeaders, setHeader, setHeader, setHeaders, setParams

你可能感兴趣的:(java,强化,学习,java,HttpClient)