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. 每天一个linux命令(51)--grep命令

    linux系统中grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.grep 全称是 global regular expression print,表示全局正则 ...

  2. 第21篇 js四种继承方式

    js是一个很自由的语言,没有强类型的语言的那种限制,实现一个功能往往有很多做法.继承就是其中的一个,在js中继承大概可以分为四大类,上面一篇文章也提及过一些,下面开始详细说说js的继承. 1.原型继承 ...

  3. 转换器3:手写PHP转Python编译器,词法部分

    上周写了<ThinkPhp模板转Flask.Django模板> 一时技痒,自然而然地想搞个大家伙,把整个PHP程序转成Python.不比模板,可以用正则匹配偷懒,这次非写一个Php编译器不 ...

  4. 1753: [Usaco2005 qua]Who's in the Middle

    1753: [Usaco2005 qua]Who's in the Middle Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 290  Solved:  ...

  5. mp4文件格式解析

    目前MP4的概念被炒得很火,也很乱.最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准.随后MP4概念被转移到视频上,对应的是MPEG-4标准.而现在我们流行的叫法,多半是指能播放M ...

  6. JavaWeb之JSON

    一.什么是JSON? JSON: JavaScript Object Notation(JavaScript 对象表示法) JSON 是存储和交换文本信息的语法.类似 XML. JSON 比 XML ...

  7. mybatis基础学习4---懒加载和缓存

    1:懒加载 1)在主配置文件设置(要放在配置文件最前面) <!-- 延迟加载配置,两个都必须同时有 --> <settings> <!-- lazyLoadingEnab ...

  8. github多用户git push错误remote: Permission to user1/z.git denied to user2

    背景:同一台电脑的public key同时添加到了github的两个账户,导致user1的仓库没法正常提交. 解决办法:为两个账户分别配置ssh key,配置~/.ssh/config文件(windo ...

  9. 关于mui选择器的使用

    使用mui引入选择器的picker.js.poppicker.js.及他们的css文件之后引入代码与点击确定之后的状态: document.querySelector('#osex').addEven ...

  10. Linux shell-tail

    使用tail --help查看命令用于备忘 tail [  -f ] [  -c Number |  -n Number |  -m Number |  -b Number |  -k Number ...