java 客户端发起http请求
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请求的更多相关文章
- java 客户端发起http请求2
客户端请求方式一,如果数据类型为 x-www-form-urlencoded 用到的json jar包为 gradle ('com.alibaba:fastjson:1.2.38',) 那么对应的代码 ...
- servlet 接受和回复向服务器对客户端发起得请求
servlet 接受和回复向服务器对客户端发起得请求
- 【原创】Silverlight客户端发起WebRequest请求分析
Silverlight网站部署后,客户端浏览器访问的时候会 下载 网站的xap文件包等信息,把程序代码放到本地执行,因为本地机器上安装了silverlight运行库. 所以如果silverlight前 ...
- java如何发起https请求
1.写一个SSLClient类,继承至HttpClient import java.security.cert.CertificateException; import java.security.c ...
- 【问题记录】Java服务发起HTTPS请求报错:PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException
问题报错 今天上线了我开发的一个OAuth2单点登录客户端的实现,在测试系统验证没问题,到生产环境由于单点登录服务端HTTPS协议,报错如下: I/O error on POST request fo ...
- 一个完整的用java客户端使用httpClient请求网页并返回的方法
import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import ja ...
- Kubernetes官方java客户端之七:patch操作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java httpclient发送json 请求 ,go服务端接收
/***java客户端发送http请求*/package com.xx.httptest; /** * Created by yq on 16/6/27. */ import java.io.IOEx ...
- 关于java发起http请求
我们到底能走多远系列(41) 扯淡: 好久没总结点东西了,技术上没什么总结,感觉做事空牢牢的.最近也比较疲惫. 分享些东西,造福全人类~ 主题: 1,java模拟发起一个http请求 使用HttpUR ...
随机推荐
- C# Windows 异步线程
Task t = new Task(new Action(() => { //推送产品 ...
- 配置apache
1. 修改httpd.conf文件 # vi /usr/local/apache/conf/httpd.conf 1) 设置根目录的路径 根目录是指Apache存放配置文件和日志文件的目录,配置参数 ...
- Hadoop伪分布安装配置
安装环境: 系统:Ubuntu 14.10 64bit hadoop:2.5.1 jdk:1.8.0_11 安装步骤: 一.安装JDK 安装 jdk,并且配置环境以及设置成默认 sudo gedi ...
- sqlserver的一些小知识点
1.高效分页sql和储存过程 select top 每页条数 * from ( select ROW_NUMBER() over (order by id)as nid ,* from table01 ...
- C#知识整理笔记
这里简单介绍了一些常用的属性,以及一些术语的解释和举例说明,不太全面,希望读者多多补充. 1.重载:函数名相同,参数的个数或参数类型不同; public void MyDog(string s); p ...
- Implement Stack using Queues leetcode
Implement the following operations of a stack using queues. push(x) -- Push element x onto stack. po ...
- 简单的线性M移动平均
最近在写Python的爬虫爬取全校学生的成绩信息和照片,发现些许问题. python的内存管理机制还没摸透,随着程序的运行,占用内存逐渐增大,料想应该是新开辟的空间未及时释放. 先研究研究算法,为比赛 ...
- cuda内存总结
1.shared memory __shared__ 声明为共享内存,将会保存在共享内存中 2.constant memory __constant__ 声明为常量内存,将会保存在常量内存中,常量内 ...
- YII contoller控制器之间跳转的方法redirect
一个contoller CustomerController里怎么调用另一个controller里的action,Acontoller调用SiteContoller的actionShow($id), ...
- JS中new的自定义实现创建实例对象
我们都知道在JS中通常通过对象字面量和new关键字来创建对象,那么今天我就来给大家讲讲new是怎么创建实例对象的:首先创建一个构造函数: function Person(name,age){ this ...