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. 同一环境下新建Standby RAC库

    需求:在同一个环境下新建Standby RAC库,即和Primary RAC在相同的磁盘组. 说明:生产环境一般不建议这样配置DG,因为存储层面是相同磁盘组,灾备的实际意义不大.我这里是用作读写分离. ...

  2. Ubuntu下安装Redis并实现远程访问

    之前的一篇随笔写到Redis在Windows下的安装,但目前好多大数据处理的服务是在Linux上的,所以想以Redis为例并实现在Windows上利用C#代码远程访问. 以在Ubuntu下为例,步骤如 ...

  3. bash之管线命令

    命令的输出需要经过好几道手续才能得到我们想要的格式,需要用到管线(pipe),(|) 管线命令(|)仅能处理stdandard output,对stdandard error output会忽略 管线 ...

  4. Selenium 使用css selector (资源来源于网络)

    Selenium - CSS Selector 昨天我练习了用CSS(即层叠样式表Cascading Stylesheet) Selector来定位(locate)页面上的元素(Elements).S ...

  5. WeMall微信商城源码插件会员卡代码详情

    WeMall微信商城源码插件会员卡代码是用于商业推广的比较有效的方式,分享了部分比较重要的代码,供技术员学习参考 Index_index.html <html> <head> ...

  6. 3892: [Usaco2014 Dec]Marathon

    3892: [Usaco2014 Dec]Marathon Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 169  Solved: 100[Submi ...

  7. 1751: [Usaco2005 qua]Lake Counting

    1751: [Usaco2005 qua]Lake Counting Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 190  Solved: 150[Su ...

  8. 1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富

    1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 498  Sol ...

  9. netflix zuul-simple-webapp.war在tomcat下启动

    按照netflix 在github 的wiki的文档使用 gradlew jettyRun 可以启动jetty来进行测试. 在本地build war 以后,我放在tomcat 运行的时候,却不可以运行 ...

  10. iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结

    iOS回顾笔记(08) -- 自定义Cell的类型和创建步骤总结 项目中我们常见的自定义cell主要分为两种 等高cell:如应用列表.功能列表 非等高cell:如微博列表.QQ聊天页面 下面对这 ...