HttpClient使用
1.HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包
	2.主要的功能
		(1)实现了所有 HTTP 的方法(GET,POST,PUT,DELETE 等)
		(2)支持自动转向
		(3)支持 HTTPS 协议
		(4)支持代理服务器等
		我们所用的solrj就封装了HttpClient
		可用于调用微信接口
	3.get请求
        //1 创建Httpclient对象------------------相当于打开浏览器
        CloseableHttpClient httpclient = HttpClients.createDefault();
//2 创建http GET请求--------------------在浏览器输入uri
        HttpGet httpGet = new HttpGet("http://www.baidu.com/");
CloseableHttpResponse response = null;
        try {
            // 3执行请求-----------enter键发送请求
            response = httpclient.execute(httpGet);
            //4 判断返回状态是否为200----------------返回成功状态码,获取内容
            if (response.getStatusLine().getStatusCode() == 200) {
                String content = EntityUtils.toString(response.getEntity(), "UTF-8");
                System.out.println("内容长度:"+content.length());
            }
        } finally {
            if (response != null) {
            	//5释放资源---------------------------关闭浏览器
                response.close();
            }
            httpclient.close();
        }
    4.带参数的GET请求
    	 // 定义请求的参数
        URI uri = new URIBuilder("http://www.baidu.com/s").setParameter("wd", "java").build();
        // 创建http GET请求
        HttpGet httpGet = new HttpGet(uri);
    5.POST请求(与get请求相同,只需吧请求改为post即可)
    	 // 创建http POST请求
        HttpPost httpPost = new HttpPost("http://www.oschina.net/");
    6.带参数的POST请求(设置form表单实体,表单需要参数,参数可以多个)
    	 // 设置2个post参数,
    	List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
        parameters.add(new BasicNameValuePair("scope", "project"));
        parameters.add(new BasicNameValuePair("q", "java"));
         // 构造一个form表单式的实体
        UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters,"UTF-8");
        // 将请求实体设置到httpPost对象中
        httpPost.setEntity(formEntity);
4.	使用HttpClient调用接口
	1. 编写返回对象
		public class HttpResult
			// 响应的状态码
			private int code;
// 响应的响应体
			private String body;
	2.  封装HttpClient常用方法
		1.	// 每个方法都会用到,提取出来
			private CloseableHttpClient httpClient;
public ApiService() {
				this.httpClient = HttpClients.createDefault();
			}
		2.带参数的get请求
			public HttpResult doGet(String url, Map<String, Object> map) throws Exception {
				// 1.创建URIBuilder
				URIBuilder uriBuilder = new URIBuilder(url);
// 2.设置请求参数
				if (map != null) {
					// 遍历请求参数
					for (Map.Entry<String, Object> entry : map.entrySet()) {
						// 封装请求参数
						uriBuilder.setParameter(entry.getKey(), entry.getValue().toString());
					}
				}
// 3.创建请求对象httpGet
				HttpGet httpGet = new HttpGet(uriBuilder.build());
// 4.使用httpClient发起请求
				CloseableHttpResponse response = this.httpClient.execute(httpGet);
// 5.解析返回结果,封装返回对象httpResult
				// 5.1获取状态码
				int code = response.getStatusLine().getStatusCode();
// 5.2 获取响应体
				// 使用EntityUtils.toString方法必须保证entity不为空
				String body = "";
				if (response.getEntity() != null) {
					body = EntityUtils.toString(response.getEntity(), "UTF-8");
				}
				HttpResult result = new HttpResult();
				result.setCode(code);
				result.setBody(body);
				return result;
			}
		3.不带参数的get
			public HttpResult doGet(String uri) throws Exception {
				return this.doGet(uri, null);
			}
4.带参数的post请求
			//1、创建POST请求方式
			HttpPost httpPost = new HttpPost(url);
			//2、设置参数
			List<NameValuePair> parameters = new ArrayList<NameValuePair>(0);
			if(map != null){
				for (Map.Entry<String, Object> m : map.entrySet()) {
					parameters.add(new BasicNameValuePair(m.getKey(), m.getValue().toString()));
				}
			}
			//3、把参数设置成form表单的形式
			UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(parameters,"UTF-8");
			//4、把表单对象设置到HTTPPOST请求中
			httpPost.setEntity(formEntity);
			//5、执行,返回响应
			CloseableHttpResponse response = this.httpClient.execute(httpPost);
			//6、根据响应获取状态码和数据
			int code = response.getStatusLine().getStatusCode();
			String body = "";
			if(response.getEntity() != null){
				body = EntityUtils.toString(response.getEntity(), "utf-8");
			}
			//7、封装返回对象
			HttpResult result = new HttpResult();
			result.setCode(code);
			result.setBody(body);
return result;
5.不带参数的post请求
			public HttpResult doPost(String url) throws Exception {
				return this.doPost(url, null);
			}
		6.put方法和post方法类似,只需把post请求改为put请求即可
		  delete方法和get方法类似,只需吧get请求改为delete请求即可
HttpClient使用的更多相关文章
- HttpClient的替代者 - RestTemplate
		
需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...
 - 关于微软HttpClient使用,避免踩坑
		
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
 - 使用HttpClient的优解
		
新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...
 - Java的异步HttpClient
		
上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...
 - 揭秘Windows10 UWP中的httpclient接口[2]
		
阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...
 - C#中HttpClient使用注意:预热与长连接
		
最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...
 - HttpClient调用webApi时注意的小问题
		
HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...
 - HttpClient相关
		
HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...
 - Atitit.http httpclient实践java c# .net php attilax总结
		
Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...
 - 使用httpclient发送get或post请求
		
HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...
 
随机推荐
- 51nod 1208 窗上的星星 | 线段树 扫描线
			
51nod 1208 Stars In Your Window 题面 整点上有N颗星星,每颗星星有一个亮度.用一个平行于x轴和y轴,宽为W高为H的方框去套星星.套住的所有星星的亮度之和为S(包括边框上 ...
 - kafka  多线程消费
			
一. 1.Kafka的消费并行度依赖Topic配置的分区数,如分区数为10,那么最多10台机器来并行消费(每台机器只能开启一个线程),或者一台机器消费(10个线程并行消费).即消费并行度和分区数一致. ...
 - windows 10 enterprise 企业版 mak激活密钥
			
企业版用户请依次输入: slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /skms kms.xspace.in slmgr /ato
 - Docker 及 nvidia-docker 使用
			
Docker 基本用法 1. 安装社区版docker-ce 及 nvidia-docker2 插件 通过官网介绍的软件源的方式安装. 如果要安装nvidia-docker,由于其需要与docker-c ...
 - 栈(C语言实现)
			
栈是一种线性数据结构,顺序可能是 LIFO(后进先出)或 FILO(先进先出). 堆栈主要有三个基本操作: 1.push,把元素压入栈 2.pop,从栈中弹出元素(同时从栈中移除),最后加入的第一个被 ...
 - 使用kafka消息队列解决分布式事务(可靠消息最终一致性方案-本地消息服务)
			
微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 本文转自:http://skaka.me/blog/2016/04/21/springcloud1/ 不同于单一 ...
 - 设计模式之单例模式实现(C++)
			
#ifndef SINGLETON_H #define SINGLETON_H #include <cassert> #include <memory> #include &l ...
 - Ansible5:常用模块
			
目录 ping模块 setup模块 file模块 copy模块 service模块 cron模块 yum模块 user模块与group模块 user模块 group示例 synchronize模块 f ...
 - java基础-Math类常用方法介绍
			
java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...
 - 数据分析与展示---Matplotlib入门
			
简介: 一:Matplotlib库的介绍 (一)简单使用 二:区域划分subplot 三:plot函数 四:pyplot的中文显示 (一)方法一:修改rcParams参数 (二)方法二(推荐),在有中 ...