java jdk原生的http请求工具类
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请求工具类的更多相关文章
- Http请求工具类(Java原生Form+Json)
package com.tzx.cc.common.constant.util; import java.io.IOException; import java.io.InputStream; imp ...
- java模板模式项目中使用--封装一个http请求工具类
需要调用http接口的代码继承FundHttpTemplate类,重写getParamData方法,在getParamDate里写调用逻辑. 模板: package com.crb.ocms.fund ...
- 微信https请求工具类
工作中用到的微信https请求工具类. package com.gxgrh.wechat.tools; import com.gxgrh.wechat.wechatapi.service.System ...
- Http、Https请求工具类
最近在做微信开发,使用http调用第三方服务API,有些是需要https协议,通过资料和自己编码,写了个支持http和https的工具类,经验证可用,现贴出来保留,也供需要的人使用(有不足的地方,也请 ...
- 远程Get,Post请求工具类
1.远程请求工具类 import java.io.*; import java.net.URL; import java.net.URLConnection; import java.util.L ...
- Java判断不为空的工具类总结
1.Java判断是否为空的工具类,可以直接使用.包含,String字符串,数组,集合等等. package com.bie.util; import java.util.Collection; imp ...
- 我的Android进阶之旅------>Android关于HttpsURLConnection一个忽略Https证书是否正确的Https请求工具类
下面是一个Android HttpsURLConnection忽略Https证书是否正确的Https请求工具类,不需要验证服务器端证书是否正确,也不需要验证服务器证书中的域名是否有效. (PS:建议下 ...
- Http请求工具类 httputil
package com.snowfigure.kits.net; import java.io.BufferedReader; import java.io.IOException; import j ...
- HttpClientUtils:Http请求工具类
HttpClientUtils:Http请求工具类 Scala:HttpClientUtils Scala:HttpClientUtils import java.io.IOException imp ...
随机推荐
- Maven - Maven3实战学习笔记(2)坐标和依赖
1.maven坐标元素 maven坐标元素包括:groupId.artifactId.version.packaging.classifier. classifier:定义输出的附属构件.groupI ...
- Tarjan水题系列(5):最大半连通子图 [ZJOI2007 luogu P2272]
题目 大意: 缩点后转为求最长链的长度和最长链的个数 思路: 看懂题就会做系列 长度和个数都可以拓扑排序后DP求得 毕竟是2007年的题 代码: 如下 #include <cstdio> ...
- python_操作MySQL 初解
单文件操作数据库 import random import threading, multiprocessing import time, datetime import pymysql import ...
- python3的一些文件操作的脚手架
用python把原来的脚本重构了一下,其中写了文件操作的一些函数,如下: import os import shutil import hashlib import stat #查找文件夹中的某个文件 ...
- python3的base64编解码
使用python3的base64编解码实现字符串的简易加密解密 引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应 ...
- BZOJ 3189. [Coci2011]Slika
传送门 有回档操作,考虑离线,这样就知道最终的操作序列了 发现前面的操作会被后面覆盖,干脆直接从后往前操作,如果一个位置以前染色过了那就不用再染色 所以我们可以用 $n$ 个链表维护 $n$ 个行,操 ...
- 项目常用的几个mysql函数
1.find_in_set函数 find_in_set(str,strlist); str是一个字符串 strlist是字符串列表--一个有多个子链被“,”分开的字符串 有多种情况: a.str为nu ...
- kibana报[FORBIDDEN/12/index read-only / allow delete (api)]错误
一.错误描述 1.在kibana,dev中pose数据,报[FORBIDDEN/12/index read-only / allow delete (api)]错误. 尝试过网上的说的方法一:在kib ...
- Python基础——函数的装饰器
等待更新…………………… 后面再写
- 使用CXF开发WebService程序的总结(四):基于bean的客户端和服务端代码的编写
1. 在原服务端项目 ws_server中添加两个bean 1.1 添加两个类 User 和 Clazz package com.lonely.pojo; public class User { ...