HttpClient-使用Java通过HttpClient发送HTTP请求的方法
【HttpClient-使用Java通过HttpClient发送HTTP请求的方法】
使用Java通过HttpClient发送HTTP请求
- 1.HttpClient介绍
- 2.HttpClient的使用-流程说明
- 2.HttpClient的使用-代码
- 1.依赖
- 2. 发送get请求
- 3. 发送post请求
- 3. 获取登录的cookie
- 4. 带cookie访问接口
前言:在目前的一个项目中,我们的项目的数据来源内部的一个完善的移动端系统,想要集成他们系统的数据就得使用Java发送http模拟前端请求他们的接口,由此在项目中使用HttpClient来发送请求访问接口,此篇记录使用HttpClient的心得。1.HttpClient介绍 HttpClient是Apache提供的一个用于在Java中处理HTTP请求、响应操作的工具,它不是一个浏览器只是一个客户端的 HTTP 通信实现库。HttpClient的目标是发送请求和接收HTTP 报文,它不会去缓存内容和执行内嵌的js代码等相应的浏览器的功能。
2.HttpClient的使用-流程说明
第一步:使用CloseableHttpClient来创建一个httpClient对象。
第二步:声明请求类型,并传入相应的URL。
第三步:使用httpClient的excute()方法来传递请求对象,并获取响应对象。
第四步:获取服务器的状态码,并判断该状态码是否正常。
第五步:正常的话则将服务器发送的数据封装成HttpEntity对象。
第六步:将所得对象转化成字符串。
第七步:关闭连接,释放资源。
2.HttpClient的使用-代码 1.依赖
jar包:
文章图片
ps:需要引入3个主要jar包,httpclient-cache可以不引入。
maven:
org.apache.httpcomponents
httpclient
4.3.3
org.apache.httpcomponents
httpclient-cache
4.2.2
org.apache.httpcomponents
httpcore
4.3.2
org.apache.httpcomponents
httpmime
4.2.2
2. 发送get请求
PS:代码仅提供参考,需根据业务情况进行修改代码。
public static String getNeedApprove(String appId,String appPassword,String account) {
String result = "";
CloseableHttpClient httpclient = null;
CloseableHttpResponse res = null;
try {HttpClientContext context = HttpClientContext.create();
// 创建一个httpClient对象
httpclient = HttpClients.createDefault();
//登陆 从配置文件中读取url(也可以写成参数)
HttpGet httpGet = new HttpGet(Constants.APPLOGIN);
// 设置参数
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair("xxx", appId));
formparams.add(new BasicNameValuePair("xxx", appPassword));
formparams.add(new BasicNameValuePair("xxx", account));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httpGet.setEntity(uefEntity);
// 得到响应状态码
res = httpclient.execute(httpGet,context);
//获取返回对象
HttpEntity entity = res.getEntity();
// 通过EntityUtils获取返回结果内容
result = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
//最后一定要释放资源
if(httpclient!=null) {
try {
httpclient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}return result;
}
3. 发送post请求
PS:代码仅提供参考,需根据业务情况进行修改代码。
public static String postNeedApprove(String Id,String Password,String account) {
String result = "";
CloseableHttpClient httpclient = null;
CloseableHttpResponse res = null;
try {HttpClientContext context = HttpClientContext.create();
// 创建一个httpClient对象
httpclient = HttpClients.createDefault();
//登陆 从配置文件中读取url(也可以写成参数)
HttpPost httpPost = new HttpPost(Constants.APPLOGIN);
// 设置参数
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair("xxx", Id));
formparams.add(new BasicNameValuePair("xxx", Password));
formparams.add(new BasicNameValuePair("xxx", account));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httpPost.setEntity(uefEntity);
// 得到响应状态码
res = httpclient.execute(httpPost,context);
//获取返回对象
HttpEntity entity = res.getEntity();
// 通过EntityUtils获取返回结果内容
result = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
//最后一定要释放资源
if(httpclient!=null) {
try {
httpclient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}return result;
}
3. 获取登录的cookie
PS:代码仅提供参考,需根据业务情况进行修改代码。
public static String getCookie(String account) {
String mpApi = "";
// 创建存储cookie的空间
CookieStore store = new BasicCookieStore();
CloseableHttpClient httpclient = null;
HttpPost httppost = null;
try {
httpclient = HttpClients.custom().setDefaultCookieStore(store).build();
// 设置超时时间
// 登陆
httppost = new HttpPost(CommonVar.APPLOGIN);
// 测试环境
// 设置请求需传参数
List formparams = new ArrayList();
formparams.add(new BasicNameValuePair("xxx", CommonVar.ID));
formparams.add(new BasicNameValuePair("xxx", CommonVar.PASSWORD));
formparams.add(new BasicNameValuePair("xxx", account));
UrlEncodedFormEntity uefEntity = new UrlEncodedFormEntity(formparams, "UTF-8");
httppost.setEntity(uefEntity);
// 获取响应的cookie
CloseableHttpResponse res = httpclient.execute(httppost);
// 遍历cookie存储store
for (Iterator iterator = store.getCookies().iterator();
iterator.hasNext();
) {
Cookie cookie = (Cookie) iterator.next();
System.out.println(cookie.getName() + "," + cookie.getValue());
if (cookie.getName().equals("mpApi")) {
mpApi = cookie.getValue();
}
}} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpclient != null) {
try {
httpclient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return mpApi;
}
4. 带cookie访问接口
PS:代码仅提供参考,需根据业务情况进行修改代码。
public static String queryUser(HttpServletRequest request, String account, String cookie) {
String result = "";
CloseableHttpClient httpclient = null;
HttpPost httppost = null;
try {
// 将获取的cookie放入CloseableHttpClient中
httpclient = getHttpClient(cookie);
List detailparams = new ArrayList();
detailparams.add(new BasicNameValuePair("xxx", account));
UrlEncodedFormEntity detailEntity = new UrlEncodedFormEntity(detailparams, "UTF-8");
httppost = new HttpPost(CommonVar.QUERYUSER);
httppost.setHeader("Id", CommonVar.ID);
httppost.setEntity(detailEntity);
CloseableHttpResponse res = httpclient.execute(httppost);
HttpEntity entity = res.getEntity();
result = EntityUtils.toString(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (httpclient != null) {
try {
httpclient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
return result;
}
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 由浅入深理解AOP
- 【译】20个更有效地使用谷歌搜索的技巧
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- MybatisPlus使用queryWrapper如何实现复杂查询
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- iOS中的Block