package com.base;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.SecureRandom;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Map;
import java.util.Set; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManager;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager; /**
*
* @ClassName: HttpUtils
* @Description:http请求工具类
* @author: zhouyy
* @date: 2019年10月14日 下午3:50:34
*
*/
public class HttpUtils {
private static final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";
private static final String CTYPE_JSON = "application/json; charset=utf-8";
private static final String charset = "utf-8"; private static HttpUtils instance = null; public static HttpUtils getInstance() {
if (instance == null) {
return new HttpUtils();
}
return instance;
} public static void main(String[] args) throws SocketTimeoutException, IOException {
String resp = getInstance().postJson("http://localhost:8080/test/test", "{\"custCmonId\":\"12345678\",\"custNo\":\"111\",\"custNo111\":\"706923\"}");
System.out.println(resp);
} private class DefaultTrustManager implements X509TrustManager {
public X509Certificate[] getAcceptedIssuers() {
return null;
} public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
} public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
} /**
* 以application/json; charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postJson(String url, String jsonContent)
throws SocketTimeoutException, IOException {
return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,
null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postForm(String url) throws SocketTimeoutException,
IOException {
return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String postForm(String url, Map<String, String> params)
throws SocketTimeoutException, IOException {
return doRequest("POST", url, buildQuery(params), 15000, 15000,
CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String getForm(String url) throws SocketTimeoutException,
IOException {
return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);
} /**
* POST 以application/x-www-form-urlencoded;charset=utf-8方式传输
*
* @param url
* @param requestContent
* @return
* @throws SocketTimeoutException
* @throws IOException
*/
public String getForm(String url, Map<String, String> params)
throws SocketTimeoutException, IOException {
return doRequest("GET", url, buildQuery(params), 15000, 15000,
CTYPE_FORM, null);
} /**
*
* <p>@Description: </p>
* @Title doRequest
* @author zhouyy
* @param method 请求的method post/get
* @param url 请求url
* @param requestContent 请求参数
* @param connectTimeout 请求超时
* @param readTimeout 响应超时
* @param ctype 请求格式 xml/json等等
* @param headerMap 请求header中要封装的参数
* @return
* @throws SocketTimeoutException
* @throws IOException
* @date: 2019年10月14日 下午3:47:35
*/
private String doRequest(String method, String url, String requestContent,
int connectTimeout, int readTimeout, String ctype,
Map<String, String> headerMap) throws SocketTimeoutException,
IOException {
HttpURLConnection conn = null;
OutputStream out = null;
String rsp = null;
try {
conn = getConnection(new URL(url), method, ctype, headerMap);
conn.setConnectTimeout(connectTimeout);
conn.setReadTimeout(readTimeout); if(requestContent != null && requestContent.trim().length() >0){
out = conn.getOutputStream();
out.write(requestContent.getBytes(charset));
} rsp = getResponseAsString(conn);
} finally {
if (out != null) {
out.close();
}
if (conn != null) {
conn.disconnect();
}
conn = null;
}
return rsp;
} private HttpURLConnection getConnection(URL url, String method,
String ctype, Map<String, String> headerMap) throws IOException {
HttpURLConnection conn;
if ("https".equals(url.getProtocol())) {
SSLContext ctx;
try {
ctx = SSLContext.getInstance("TLS");
ctx.init(new KeyManager[0],
new TrustManager[] { new DefaultTrustManager() },
new SecureRandom());
} catch (Exception e) {
throw new IOException(e);
}
HttpsURLConnection connHttps = (HttpsURLConnection) url
.openConnection();
connHttps.setSSLSocketFactory(ctx.getSocketFactory());
connHttps.setHostnameVerifier(new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
});
conn = connHttps;
} else {
conn = (HttpURLConnection) url.openConnection();
}
conn.setRequestMethod(method);
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Accept",
"text/xml,text/javascript,text/html,application/json");
conn.setRequestProperty("Content-Type", ctype);
if (headerMap != null) {
for (Map.Entry<String, String> entry : headerMap.entrySet()) {
conn.setRequestProperty(entry.getKey(), entry.getValue());
}
}
return conn;
} private String getResponseAsString(HttpURLConnection conn)
throws IOException {
InputStream es = conn.getErrorStream();
if (es == null) {
return getStreamAsString(conn.getInputStream(), charset, conn);
} else {
String msg = getStreamAsString(es, charset, conn);
if (msg != null && msg.trim().length() >0) {
throw new IOException(conn.getResponseCode() + ":"
+ conn.getResponseMessage());
} else {
return msg;
}
}
} private String getStreamAsString(InputStream stream, String charset,
HttpURLConnection conn) throws IOException {
try {
Reader reader = new InputStreamReader(stream, charset); StringBuilder response = new StringBuilder();
final char[] buff = new char[1024];
int read = 0;
while ((read = reader.read(buff)) > 0) {
response.append(buff, 0, read);
} return response.toString();
} finally {
if (stream != null) {
stream.close();
}
}
} private String buildQuery(Map<String, String> params) throws IOException {
if (params == null || params.isEmpty()) {
return "";
} StringBuilder query = new StringBuilder();
Set<Map.Entry<String, String>> entries = params.entrySet();
boolean hasParam = false; for (Map.Entry<String, String> entry : entries) {
String name = entry.getKey();
String value = entry.getValue();
if (hasParam) {
query.append("&");
} else {
hasParam = true;
}
query.append(name).append("=")
.append(URLEncoder.encode(value, charset));
}
return query.toString();
}
}

非原著,借鉴大神!

https://www.cnblogs.com/jpfss/p/10063666.html

java jdk原生的http请求工具类的更多相关文章

  1. Http请求工具类(Java原生Form+Json)

    package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...

  2. java模板模式项目中使用--封装一个http请求工具类

    需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...

  3. 微信https请求工具类

    工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...

  4. Http、Https请求工具类

    最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...

  5. 远程Get,Post请求工具类

    1.远程请求工具类   import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...

  6. Java判断不为空的工具类总结

    1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. package com.bie.util; import java.util.Collection; imp ...

  7. 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类

    下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...

  8. Http请求工具类 httputil

    package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...

  9. HttpClientUtils:Http请求工具类

    HttpClientUtils:Http请求工具类 Scala:HttpClientUtils Scala:HttpClientUtils import java.io.IOException imp ...

随机推荐

  1. cannot convert from pointer to base class 'QObject' to pointer to derived class 'subClass' via virtual base 'baseClass'

    QT 编译不过的另一个问题: 1. 新建一个console工程 QT -= gui CONFIG += c++ console CONFIG -= app_bundle # The following ...

  2. mysql表优化

    一.定期分析表 ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] 二.定期检查表 CHECK TABLE tbl_nam ...

  3. 利用lambda和条件表达式构造匿名递归函数

    from operator import sub, mul def make_anonymous_factorial(): """Return the value of ...

  4. django 实现 Mock Server

    大佬 flask 实现mock server地址:https://github.com/yinquanwang/MockServer 参考使用django实现了一下,并已部署到EasyTest测试平台 ...

  5. splice方法

    此方法有三种用法: 第一种: 删除功能  返回删除内容 索引从0开始 var arr = [1,2,3,4]; var arr2 = arr.splice(0,2); arr2 ===> [1, ...

  6. php前端做过滤校验

    http://www./test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E 以上的 URL 中,将被解析为如下代码并执行: < ...

  7. 使用CXF开发WebService程序的总结(五):基于Map数据类型处理的的客户端和服务端代码的编写

    1. 首先我们按照List或数组等处理方式来处理Map,看看效果 1.1 在服务端的接口中添加以下方法 /** * 查询所有班级信息加上对应的学生列表 * * @return */ public Ma ...

  8. Linux日常操作整理

    1. Linux下建立ssh互信 需要在两台机器上保证安装ssh步骤:cd ~/.sshssh-keygen(每台机器执行此操作)ssh root@192.168.2.100 cat ~/.ssh/i ...

  9. CentOS 7.4下源码编译安装配置LAMP环境详解

    CentOS 7.4搭建LAMP,LAMP:Linux.Apache.MySQL.PHP. 目录:第一部分 准备工作第二部分 安装Apache服务第三部分 安装MySQL服务第四部分 搭建PHP运行环 ...

  10. c++判断当前登录账户是否在域环境内

    #include <Windows.h> #include <DSRole.h> #pragma comment(lib, "netapi32.lib") ...