HttpClient的使用实例
发表于:2025-01-25 作者:千家信息网编辑
千家信息网最后更新 2025年01月25日,本篇内容主要讲解"HttpClient的使用实例",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"HttpClient的使用实例"吧!HttpClient的使
千家信息网最后更新 2025年01月25日HttpClient的使用实例
本篇内容主要讲解"HttpClient的使用实例",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"HttpClient的使用实例"吧!
HttpClient的使用:
1)httpClient的简单使用:
import java.net.URI;import java.util.ArrayList;import java.util.List;import org.apache.http.NameValuePair;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.utils.URIBuilder;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;public class HttpClientDemo { public static void main(String[] args) throws Exception { // 1.创建Httpclient对象 CloseableHttpClient httpclient = HttpClients.createDefault(); // 2.1创建http GET请求,并设置参数 String url = "http://www.jxn.com/"; URI uri = new URIBuilder(url).setParameter("name", "jack").setParameter("age", "1").build(); HttpGet httpGet = new HttpGet(uri); // 2.2创建http POST请求,并设置参数 HttpPost httpPost = new HttpPost(url); Listparameters = new ArrayList (); parameters.add(new BasicNameValuePair("name", "jack")); parameters.add(new BasicNameValuePair("age", "1")); UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters); httpPost.setEntity(formEntity); // 3.构建请求配置信息 RequestConfig config = RequestConfig.custom().setConnectTimeout(1000) // 创建连接的最长时间 .setConnectionRequestTimeout(500) // 从连接池中获取到连接的最长时间 .setSocketTimeout(10 * 1000) // 数据传输的最长时间 .setStaleConnectionCheckEnabled(true) // 提交请求前测试连接是否可用 .build(); httpGet.setConfig(config); httpPost.setConfig(config); CloseableHttpResponse response = null; try { // 4.执行请求 response = httpclient.execute(httpGet);// response = httpclient.execute(httpPost); if (response.getStatusLine().getStatusCode() == 200) { // 判断返回状态是否为200 String content = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(content); } } finally { if (response != null) { response.close(); } httpclient.close(); } }}
2)使用httpClient连接池:
import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.conn.HttpClientConnectionManager;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.impl.client.HttpClients;import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;import org.apache.http.util.EntityUtils;public class HttpClientConnectionManagerDemo { public static void main(String[] args) throws Exception { PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(); connectionManager.setMaxTotal(200); // 设置最大连接数 connectionManager.setDefaultMaxPerRoute(20); // 设置每个主机地址的并发数 // 执行一次get请求 doGet(connectionManager); } public static void doGet(HttpClientConnectionManager connectionManager) throws Exception { CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build(); String url = "http://www.jxn.com/"; HttpGet httpGet = new HttpGet(url); CloseableHttpResponse response = null; try { response = httpClient.execute(httpGet); if (response.getStatusLine().getStatusCode() == 200) { String content = EntityUtils.toString(response.getEntity(), "UTF-8"); System.out.println(content); } } finally { if (response != null) { response.close(); } // 此处不能关闭httpClient!如果把httpClient关闭掉,则连接池也会被销毁 // httpClient.close(); } }}
3)HttpClient与Spring整合:
【1】pom.xml文件:
org.apache.httpcomponents httpclient 4.3.5
【2】spirng配置文件applicationContext-httpclient.xml:
属性配置文件httpclient.properties: http.maxTotal=200 http.defaultMaxPerRoute=50 http.connectTimeout=1000 http.connectionRequestTimeout=500 http.socketTimeout=10000 http.staleConnectionCheckEnabled=true
【3】封装成Service:
import java.io.IOException;import java.net.URISyntaxException;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.http.NameValuePair;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.config.RequestConfig;import org.apache.http.client.entity.UrlEncodedFormEntity;import org.apache.http.client.methods.CloseableHttpResponse;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.client.utils.URIBuilder;import org.apache.http.entity.ContentType;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.CloseableHttpClient;import org.apache.http.message.BasicNameValuePair;import org.apache.http.util.EntityUtils;import org.springframework.beans.BeansException;import org.springframework.beans.factory.BeanFactory;import org.springframework.beans.factory.BeanFactoryAware;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.jxn.common.httpclient.HttpResult;[@Service](https://my.oschina.net/service)public class ApiService implements BeanFactoryAware { private BeanFactory beanFactory; @Autowired(required = false) private RequestConfig requestConfig; [@Override](https://my.oschina.net/u/1162528) public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } private CloseableHttpClient getHttpClient() { return this.beanFactory.getBean(CloseableHttpClient.class); } // 执行GET请求 public String doGet(String url) throws ClientProtocolException, IOException { HttpGet httpGet = new HttpGet(url); httpGet.setConfig(requestConfig); CloseableHttpResponse response = null; try { // 执行请求 response = getHttpClient().execute(httpGet); // 判断返回状态是否为200 if (response.getStatusLine().getStatusCode() == 200) { return EntityUtils.toString(response.getEntity(), "UTF-8"); } } finally { if (response != null) { response.close(); } } return null; } // 带有参数的GET请求 public String doGet(String url, Mapparams) throws ClientProtocolException, IOException, URISyntaxException { URIBuilder builder = new URIBuilder(url); for (Map.Entry entry : params.entrySet()) { builder.setParameter(entry.getKey(), entry.getValue()); } return doGet(builder.build().toString()); } // 执行post请求 public HttpResult doPost(String url, Map params) throws IOException { // 创建http POST请求 HttpPost httpPost = new HttpPost(url); httpPost.setConfig(requestConfig); if (null != params) { List parameters = new ArrayList (0); for (Map.Entry entry : params.entrySet()) { parameters.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } // 构造一个form表单式的实体 UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters, "UTF-8"); httpPost.setEntity(formEntity); } CloseableHttpResponse response = null; try { response = getHttpClient().execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString( response.getEntity(), "UTF-8")); } finally { if (response != null) { response.close(); } } } // 执行post请求,发送json数据 public HttpResult doPostJson(String url, String json) throws IOException { // 创建http POST请求 HttpPost httpPost = new HttpPost(url); httpPost.setConfig(requestConfig); if (null != json) { // 构造一个字符串的实体 StringEntity stringEntity = new StringEntity(json, ContentType.APPLICATION_JSON); httpPost.setEntity(stringEntity); } CloseableHttpResponse response = null; try { response = getHttpClient().execute(httpPost); return new HttpResult(response.getStatusLine().getStatusCode(), EntityUtils.toString( response.getEntity(), "UTF-8")); } finally { if (response != null) { response.close(); } } }}// 返回的结果public class HttpResult { private Integer code; private String data; public HttpResult() { } public HttpResult(Integer code, String data) { this.code = code; this.data = data; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } public String getData() { return data; } public void setData(String data) { this.data = data; }}
【4】实现定期关闭无效的连接:
import org.apache.http.conn.HttpClientConnectionManager;public class IdleConnectionEvictor extends Thread { private final HttpClientConnectionManager connectionManager; private volatile boolean shutdown; // 创建IdleConnectionEvictor对象的时候,启动线程 public IdleConnectionEvictor(HttpClientConnectionManager connectionManager) { this.connectionManager = connectionManager; this.start(); } [@Override](https://my.oschina.net/u/1162528) public void run() { try { while (!shutdown) { synchronized (this) { wait(5000); // 关闭失效的连接(每隔5秒检查一次) connectionManager.closeExpiredConnections(); } } } catch (InterruptedException ex) { // 结束 } } public void shutdown() { shutdown = true; synchronized (this) { notifyAll(); } }}
到此,相信大家对"HttpClient的使用实例"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
UTF-8
实例
最长
参数
文件
时间
配置
内容
实体
对象
数据
状态
学习
实用
更深
最大
主机
信息
兴趣
地址
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
上海软件开发外包 每人年
农村科技发展互联网网络
镇江视频系统服务器
文献检索可以用到哪些数据库
深圳市西风网络技术
行唐智能软件开发服务诚信推荐
软件开发合同纠纷仲裁答辩书
软件开发选择什么公司好
喵星大作战服务器异常
网络安全对与错
网络安全战于几年开始
铜川软件开发解决方案
花点爱互联网科技公司
中国自主网络技术
nas服务器买多大合适
优麒麟服务器软件
开发个货拉拉软件开发
网络安全公司迪普的人排名
excel 数据库 代码
数据库菜单顺序
网狐棋牌 数据库说明
ad域控服务器证书证书
河南省未落实网络安全义务案
最好数据库多久更新一次
英雄联盟数据库数据丢失
数据库1045提示
怎么看服务器硬盘是否支持串口
门店网络安全问题有哪些
国内最大的中文文献资源数据库
上海好贸网络技术有限公司