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使用的更多相关文章

  1. HttpClient的替代者 - RestTemplate

    需要的包 ,除了Spring的基础包外还用到json的包,这里的数据传输使用json格式 客户端和服务端都用到一下的包 <!-- Spring --> <dependency> ...

  2. 关于微软HttpClient使用,避免踩坑

    最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...

  3. 使用HttpClient的优解

    新工作入职不满半周,目前仍然还在交接工作,适应环境当中,笔者不得不说看别人的源码实在是令人痛苦.所幸今天终于将大部分工作流畅地看了一遍,接下来就是熟悉框架技术的阶段了. 也正是在看源码的过程当中,有一 ...

  4. Java的异步HttpClient

    上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...

  5. 揭秘Windows10 UWP中的httpclient接口[2]

    阅读目录: 概述 如何选择 System.Net.Http Windows.Web.Http HTTP的常用功能 修改http头部 设置超时 使用身份验证凭据 使用客户端证书 cookie处理 概述 ...

  6. C#中HttpClient使用注意:预热与长连接

    最近在测试一个第三方API,准备集成在我们的网站应用中.API的调用使用的是.NET中的HttpClient,由于这个API会在关键业务中用到,对调用API的整体响应速度有严格要求,所以对HttpCl ...

  7. HttpClient调用webApi时注意的小问题

    HttpClient client = new HttpClient(); client.BaseAddress = new Uri(thisUrl); client.GetAsync("a ...

  8. HttpClient相关

    HTTPClient的主页是http://jakarta.apache.org/commons/httpclient/,你可以在这里得到关于HttpClient更加详细的信息 HttpClient入门 ...

  9. Atitit.http httpclient实践java c# .net php attilax总结

    Atitit.http httpclient实践java c# .net php attilax总结 1. Navtree>> net .http1 2. Httpclient理论1 2. ...

  10. 使用httpclient发送get或post请求

    HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建 ...

随机推荐

  1. 【刷题】BZOJ 4998 星球联盟

    Description 在遥远的S星系中一共有N个星球,编号为1-N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太 ...

  2. hdu4336 Card Collector 【最值反演】

    题目链接 hdu4336 题解 最值反演 也叫做\(min-max\)容斥,在计算期望时有奇效 \[max\{S\} = \sum\limits_{T \in S} (-1)^{|T| + 1}min ...

  3. CF1009F Dominant Indices 解题报告

    CF1009F Dominant Indices 题意简述 给出一颗以\(1\)为跟的有根树,定义\(d_{i,j}\)为以\(i\)为根节点的子树中到\(i\)的距离恰好为\(j\)的点的个数,对每 ...

  4. 【poj2406】 Power Strings

    http://poj.org/problem?id=2406 (题目链接) 题意 给定一个字符串 L,已知这个字符串是由某个字符串 S 重复 R 次而得到的, 求 R 的最大值. Solution 后 ...

  5. 【数学/贪心/DP】【CF1088E】 Ehab and a component choosing problem

    Description 给定一棵 \(n\) 个节点的树,点有点权 \(a_u\),可能为负.现在请你在树上找出 \(k~(1~\leq~k~\leq~n)\) 个不相交集合,使得每个集合中的每对点都 ...

  6. 关于nodejs的几个干货(读中文文件编码问题/发送邮件/定时任务)

    关于nodejs读取中文文件真是折腾了不少时间,网上各种方案,最后没有一个适用我,好在解决了. 下面的三个知识点都是从项目中抽出的,要单独运行脚本的话需要用全局模式来安装模块,比如安装中文转换模块(后 ...

  7. 1003 Emergency(25 分)

    As an emergency rescue team leader of a city, you are given a special map of your country. The map s ...

  8. 【题解】Arpa's letter-marked tree and Mehrdad's Dokhtar-kosh paths Codeforces 741D DSU on Tree

    Prelude 很好的模板题. 传送到Codeforces:(* ̄3 ̄)╭ Solution 首先要会DSU on Tree,不会的看这里:(❤ ω ❤). 众所周知DSU on Tree是可以用来处 ...

  9. HDU1532最大流 Edmonds-Karp,Dinic算法 模板

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...

  10. nginx反向代理下载文件失败处理

    最近遇到了客户在从我们的服务器下载文件失败时的情况.然后把解决方案一并整理一下以备后续.需要说明的是,我们前端都是使用nginx来做反向代理,后面的逻辑处理采用php的方式. 1.缓存目录不可写 ng ...