package com.mall.core.utils.http;

 import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
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.*;
import org.apache.http.entity.StringEntity;
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;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set; /**
* Created by admin on 2017/2/22.
    自己写了一个工具类 把常见的几种http请求方法 封装起来
*/
public class HttpUtils { private static final Logger logger = LogManager.getLogger(HttpUtils.class);
private static final RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(20000).setConnectionRequestTimeout(10000)
.setSocketTimeout(20000).build(); /**
* Http Get
*
* @param url 请求路径
* @param params 参数
* @return http响应状态及json结果
*/
public static HttpResult doGet(String url, Map<String, String> params) {
CloseableHttpClient httpClient = HttpClients.createDefault();
url = contactUrl(url, params);
HttpGet httpGet = new HttpGet(url.replace(" ", ""));
return executeRequest(httpClient, httpGet);
} /**
* Http Post
*
* @param url 请求路径
* @param params 参数
* @return http响应状态及json结果
*/
public static HttpResult doPost(String url, Map<String, String> params) {
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpPost httpPost = new HttpPost(url);
List<NameValuePair> pairs = new ArrayList<>();
Set<String> keys = params.keySet();
for (String key : keys) {
String value = params.get(key);
pairs.add(new BasicNameValuePair(key, value));
}
return executeRequest(httpClient, httpPost, pairs);
} /**
* Http Put
*
* @param url 请求路径
* @param params 参数
* @return http响应状态及json结果
*/
public static HttpResult doPut(String url, Map<String, String> params) {
CloseableHttpClient httpClient = HttpClients.createDefault();
url = contactUrl(url, params);
HttpPut httpPut = new HttpPut(url);
return executeRequest(httpClient, httpPut);
} /**
* Http Delete
*
* @param url 请求路径
* @param params 参数
* @return http响应状态及json结果
*/
public static HttpResult doDelete(String url, Map<String, String> params) {
CloseableHttpClient httpClient = HttpClients.createDefault();
url = contactUrl(url, params);
HttpDelete httpDelete = new HttpDelete(url);
return executeRequest(httpClient, httpDelete);
} /**
* 拼装url
*
* @param url url
* @param params 参数
* @return
*/
private static String contactUrl(String url, Map<String, String> params) {
if (params != null) {
String param = "";
Set<String> keys = params.keySet();
for (String key : keys) {
String value = params.get(key);
if (value == null || value.equals("null")) {
continue;
}
param += key + "=" + value + "&";
}
if (!param.equals("")) {
url += "?" + param.substring(0, param.length() - 1);
}
}
return url;
}
private static String contactUrl_(String url, Map<String, Object> params){
if(params != null){
String param = "";
Set<String> keys = params.keySet();
for(String key : keys){
Object value = params.get(key);
if(value == null || value.equals("null")){
continue;
}
param += key + "=" + value + "&";
}
if(!param.equals("")){
url += "?" + param.substring(0, param.length() - 1);
}
}
return url;
} public static String getFullPath(HttpServletRequest request) {
String basePath = request.getRequestURL().toString();
String queryString = request.getQueryString();
if (StringUtils.isNotEmpty(queryString)) {
queryString = "?" + queryString;
} else {
queryString = "";
} return basePath + queryString;
} /**
* 执行GET/PUT/DELETE请求
*
* @param httpClient
* @param request
* @return
*/
private static HttpResult executeRequest(CloseableHttpClient httpClient, HttpRequestBase request) {
HttpResult result = null;
request.setConfig(requestConfig);
try {
HttpResponse response = httpClient.execute(request);
int code = response.getStatusLine().getStatusCode();
result = new HttpResult();
result.setStatus(code);
if (code == HttpStatus.SC_OK) {
result.setResponse(EntityUtils.toString(response.getEntity()));
}
} catch (Exception e) {
logger.error("=========GET/PUT/DELETE请求异常:" + request.getURI(), e);
return result;
} finally {
try {
httpClient.close();
} catch (IOException e) {
logger.error("=========GET/PUT/DELETE请求连接关闭异常:" + request.getURI(), e);
}
}
logger.debug("========GET/PUT/DELETE请求响应:" + request.getURI() + "\n" + result);
return result;
} /**
* 执行POST请求
*
* @param httpClient
* @param request
* @param pairs
* @return
*/
private static HttpResult executeRequest(CloseableHttpClient httpClient, HttpEntityEnclosingRequestBase request, List<NameValuePair> pairs) {
HttpResult result = null;
request.setConfig(requestConfig);
try {
StringEntity entity;
if (pairs.size() == 1 && pairs.get(0).getName().equals("json")) {
entity = new StringEntity(pairs.get(0).getValue(), "UTF-8");
entity.setContentType("application/json");
} else {
entity = new UrlEncodedFormEntity(pairs, "UTF-8");
}
request.setEntity(entity);
HttpResponse response = httpClient.execute(request);
int code = response.getStatusLine().getStatusCode();
result = new HttpResult();
result.setStatus(code);
if (code == HttpStatus.SC_OK) {
result.setResponse(EntityUtils.toString(response.getEntity()));
}
} catch (Exception e) {
logger.error("=========POST请求异常:" + request.getURI(), e);
return result;
} finally {
try {
httpClient.close();
} catch (IOException e) {
logger.error("=========POST请求连接关闭异常:" + request.getURI(), e);
}
}
logger.debug("========POST请求响应:" + request.getURI() + "\n" + result);
return result;
}
}

顺便把 响应的那个HttpResult 类也贴下

public class HttpResult {

    private int status;
private String response; public HttpResult() {
status = 400;
} public HttpResult(int status, String response) {
this.status = status;
this.response = response;
} public int getStatus() {
return status;
} public void setStatus(int status) {
this.status = status;
} public String getResponse() {
return response;
} public void setResponse(String response) {
this.response = response;
} @Override
public String toString() {
return "HttpResult{" +
"status=" + status +
", response='" + response + '\'' +
'}';
}
}

java 客户端发起http请求的更多相关文章

  1. java 客户端发起http请求2

    客户端请求方式一,如果数据类型为 x-www-form-urlencoded 用到的json jar包为 gradle ('com.alibaba:fastjson:1.2.38',) 那么对应的代码 ...

  2. servlet 接受和回复向服务器对客户端发起得请求

    servlet 接受和回复向服务器对客户端发起得请求

  3. 【原创】Silverlight客户端发起WebRequest请求分析

    Silverlight网站部署后,客户端浏览器访问的时候会 下载 网站的xap文件包等信息,把程序代码放到本地执行,因为本地机器上安装了silverlight运行库. 所以如果silverlight前 ...

  4. java如何发起https请求

    1.写一个SSLClient类,继承至HttpClient import java.security.cert.CertificateException; import java.security.c ...

  5. 【问题记录】Java服务发起HTTPS请求报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException

    问题报错 今天上线了我开发的一个OAuth2单点登录客户端的实现,在测试系统验证没问题,到生产环境由于单点登录服务端HTTPS协议,报错如下: I/O error on POST request fo ...

  6. 一个完整的用java客户端使用httpClient请求网页并返回的方法

    import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import ja ...

  7. Kubernetes官方java客户端之七:patch操作

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. java httpclient发送json 请求 ,go服务端接收

    /***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...

  9. 关于java发起http请求

    我们到底能走多远系列(41) 扯淡: 好久没总结点东西了,技术上没什么总结,感觉做事空牢牢的.最近也比较疲惫. 分享些东西,造福全人类~ 主题: 1,java模拟发起一个http请求 使用HttpUR ...

随机推荐

  1. UIView和layer的关系

    UIView和layer的关系 UIView是layer的代理 View的根layer ---也就是说view本身自带一个layer, 这个layer 我们叫它根layer 所有视图显示是因为继承UI ...

  2. javaSE复习总结

    之前匆匆忙忙学完了java,后来又接着学习ee,然而,越是想要快一点最后反而会更慢一点.因为匆忙间 我几乎什么都没学会.在后面的学习中实在非常吃力.就把javase 的视频大部分又重新看了一遍.真的收 ...

  3. Prerender.io - 预渲染架构,提高AngularJS SEO

    近些年来,越来越多的JavaScript框架(即AngularJS,BackboneJS,ReactJS)变得越来越流行.许多公司和开发人员使用这些JavaScript框架开发应用程序.这些框架有很多 ...

  4. 问题 : lang.NoClassDefFoundError: org/springframework/core/annotation/AnnotatedElementUtils,的解决方法

    今天在做junit 测试的时候  出现了一个问题,花了一段时间 才解决. java.lang.NoClassDefFoundError: org/springframework/core/annota ...

  5. iOS 调试心得

    修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...

  6. 数据库 t-sql 语句

    sql 高级语句  在基础语句上加上条件 条件修改: update 表名set 列明=要修改的值  where 列名 =原来的值 条件删除    删除  这个值的的一行 delete from 表名 ...

  7. 启动phpstyle Apache的80端口被win7的System PID=4的进程占用的解决方法

    学习前端是,用到Ajax,php语言,操作mysql数据库,浏览器无法解析php代码(把源码输出):原因,我之前用的是tomcat服务器写jsp,servlet,php用的是apache服务器,没有配 ...

  8. node c++多线程插件 第二天 c++指针

    虽然取名叫node多线程插件,但是目前还是在学习c++的情况. 今天谈一谈c++指针. c++指针就像是c#中的引用变量,例如一个Person类的实例zs{Name="张三",Ag ...

  9. 2761: [JLOI2011]不重复数字(哈希表)

    2761: [JLOI2011]不重复数字 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1770  Solved: 675[Submit][Stat ...

  10. [译]Selenium Python文档:五、Waits等待

    大多数现代web应用都使用了AJAX技术.当浏览器加载一个页面的时候,该页面内的元素可能在不用的时间间隔内进行加载.这使得元素定位变得比较困难:如果一个元素还没有出现在DOM中,定位函数将会抛出一个E ...