SpringBoot创建HttpClient并使用

    1、引入依赖
 
 
< dependency > < groupId >org.apache.httpcomponents </ groupId > < artifactId >httpclient </ artifactId > < version >4.5.3 </ version > </ dependency >

2、yml配置

 
  
http: maxTotal: 100 #并发数 defaultMaxPerRoute: 20 #创建连接的最长时间 connectTimeout: 1000 #从连接池中获取到连接的最长时间 connectionRequestTimeout: 500 #数据传输的最长时间 socketTimeout: 10000

3、配置类

 
  
@Configuration public class HttpClient { @Value( "${http.maxTotal}") private Integer maxTotal; @Value( "${http.defaultMaxPerRoute}") private Integer defaultMaxPerRoute; @Value( "${http.connectTimeout}") private Integer connectTimeout; @Value( "${http.connectionRequestTimeout}") private Integer connectionRequestTimeout; @Value( "${http.socketTimeout}") private Integer socketTimeout; /** * 首先实例化一个连接池管理器,设置最大连接数、并发连接数 */ @Bean(name = "httpClientConnectionManager") public PoolingHttpClientConnectionManager getHttpClientConnectionManager() { PoolingHttpClientConnectionManager httpClientConnectionManager = new PoolingHttpClientConnectionManager(); //最大连接数 httpClientConnectionManager.setMaxTotal( maxTotal); //并发数 httpClientConnectionManager.setDefaultMaxPerRoute( defaultMaxPerRoute); return httpClientConnectionManager; } /** * 实例化连接池,设置连接池管理器。 * 这里需要以参数形式注入上面实例化的连接池管理器 */ @Bean(name = "httpClientBuilder") public HttpClientBuilder getHttpClientBuilder( @Qualifier( "httpClientConnectionManager") PoolingHttpClientConnectionManager httpClientConnectionManager) { //HttpClientBuilder中的构造方法被protected修饰,所以这里不能直接使用new来实例化一个HttpClientBuilder,可以使用HttpClientBuilder提供的静态方法create()来获取HttpClientBuilder对象 HttpClientBuilder httpClientBuilder = HttpClientBuilder. create(); httpClientBuilder.setConnectionManager(httpClientConnectionManager); return httpClientBuilder; } /** * 注入连接池,用于获取httpClient */ @Bean public CloseableHttpClient getCloseableHttpClient( @Qualifier( "httpClientBuilder") HttpClientBuilder httpClientBuilder) { return httpClientBuilder.build(); } /** * Builder是RequestConfig的一个内部类 * 通过RequestConfig的custom方法来获取到一个Builder对象 * 设置builder的连接信息 * 这里还可以设置proxy,cookieSpec等属性。有需要的话可以在此设置 */ @Bean(name = "builder") public RequestConfig.Builder getBuilder() { RequestConfig.Builder builder = RequestConfig. custom(); return builder.setConnectTimeout( connectTimeout) .setConnectionRequestTimeout( connectionRequestTimeout) .setSocketTimeout( socketTimeout); } /** * 使用builder构建一个RequestConfig对象 */ @Bean public RequestConfig getRequestConfig( @Qualifier( "builder") RequestConfig.Builder builder) { return builder.build(); }}

4重写doGet和doPost方法

http工具类:package com.tpl.util; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpclient.Header; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.methods.GetMethod; import org.apache.commons.httpclient.params.HttpMethodParams; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; /** * */ public class HttpClientUtil { public static void main(String arg[]) throws Exception { String url = "http://xxx/project/getxxx.action"; JSONObject params= new JSONObject(); List res=new ArrayList(); JSONObject params1 = new JSONObject(); // params1.put("code", "200"); // params1.put("phone", "13240186028"); res.add(params1); params.put("result", res); String ret = doPost(url, params).toString(); System.out.println(ret); } /** httpClient的get请求方式2 * @return * @throws Exception */ public static String doGet(String url, String charset) throws Exception { /* * 使用 GetMethod 来访问一个 URL 对应的网页,实现步骤: 1:生成一个 HttpClinet 对象并设置相应的参数。 * 2:生成一个 GetMethod 对象并设置响应的参数。 3:用 HttpClinet 生成的对象来执行 GetMethod 生成的Get * 方法。 4:处理响应状态码。 5:若响应正常,处理 HTTP 响应内容。 6:释放连接。 */ /* 1 生成 HttpClinet 对象并设置参数 */ HttpClient httpClient = new HttpClient(); // 设置 Http 连接超时为5秒 httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000); /* 2 生成 GetMethod 对象并设置参数 */ GetMethod getMethod = new GetMethod(url); // 设置 get 请求超时为 5 秒
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值