http类 java_Http请求工具类(Java原生)

packagecom.tzx.cc.common.constant.util;importjava.io.IOException;importjava.io.InputStream;importjava.io.InputStreamReader;importjava.io.OutputStream;importjava.io.Reader;importjava.net.HttpURLConnection;importjava.net.SocketTimeoutException;importjava.net.URL;importjava.net.URLEncoder;importjava.security.SecureRandom;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.Map;importjava.util.Set;importjavax.net.ssl.HostnameVerifier;importjavax.net.ssl.HttpsURLConnection;importjavax.net.ssl.KeyManager;importjavax.net.ssl.SSLContext;importjavax.net.ssl.SSLSession;importjavax.net.ssl.TrustManager;importjavax.net.ssl.X509TrustManager;importorg.apache.commons.lang.StringUtils;/*** http请求工具类

*

*@authorzhangyong

**/

public classHttpUtils {private final String CTYPE_FORM = "application/x-www-form-urlencoded;charset=utf-8";private final String CTYPE_JSON = "application/json; charset=utf-8";private final String charset = "utf-8";private static HttpUtils instance = null;public staticHttpUtils getInstance() {if (instance == null) {return newHttpUtils();

}returninstance;

}private class DefaultTrustManager implementsX509TrustManager {publicX509Certificate[] getAcceptedIssuers() {return null;

}public voidcheckClientTrusted(X509Certificate[] chain, String authType)throwsCertificateException {

}public voidcheckServerTrusted(X509Certificate[] chain, String authType)throwsCertificateException {

}

}/*** 以application/json; charset=utf-8方式传输

*

*@paramurl

*@paramrequestContent

*@return*@throwsSocketTimeoutException

*@throwsIOException*/

publicString postJson(String url, String jsonContent)throwsSocketTimeoutException, IOException {return doRequest("POST", url, jsonContent, 15000, 15000, CTYPE_JSON,null);

}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输

*

*@paramurl

*@paramrequestContent

*@return*@throwsSocketTimeoutException

*@throwsIOException*/

public String postForm(String url) throwsSocketTimeoutException,

IOException {return doRequest("POST", url, "", 15000, 15000, CTYPE_FORM, null);

}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输

*

*@paramurl

*@paramrequestContent

*@return*@throwsSocketTimeoutException

*@throwsIOException*/

public String postForm(String url, Mapparams)throwsSocketTimeoutException, IOException {return doRequest("POST", url, buildQuery(params), 15000, 15000,

CTYPE_FORM,null);

}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输

*

*@paramurl

*@paramrequestContent

*@return*@throwsSocketTimeoutException

*@throwsIOException*/

public String getForm(String url) throwsSocketTimeoutException,

IOException {return doRequest("GET", url, "", 15000, 15000, CTYPE_FORM, null);

}/*** POST 以application/x-www-form-urlencoded;charset=utf-8方式传输

*

*@paramurl

*@paramrequestContent

*@return*@throwsSocketTimeoutException

*@throwsIOException*/

public String getForm(String url, Mapparams)throwsSocketTimeoutException, IOException {return doRequest("GET", url, buildQuery(params), 15000, 15000,

CTYPE_FORM,null);

}privateString doRequest(String method, String url, String requestContent,int connectTimeout, intreadTimeout, String ctype,

Map headerMap) throwsSocketTimeoutException,

IOException {

HttpURLConnection conn= null;

OutputStream out= null;

String rsp= null;try{

conn= getConnection(newURL(url), method, ctype, headerMap);

conn.setConnectTimeout(connectTimeout);

conn.setReadTimeout(readTimeout);if(!StringUtils.isEmpty(requestContent)){

out=conn.getOutputStream();

out.write(requestContent.getBytes(charset));

}

rsp=getResponseAsString(conn);

}finally{if (out != null) {

out.close();

}if (conn != null) {

conn.disconnect();

}

conn= null;

}returnrsp;

}privateHttpURLConnection getConnection(URL url, String method,

String ctype, Map headerMap) throwsIOException {

HttpURLConnection conn;if ("https".equals(url.getProtocol())) {

SSLContext ctx;try{

ctx= SSLContext.getInstance("TLS");

ctx.init(new KeyManager[0],new TrustManager[] { newDefaultTrustManager() },newSecureRandom());

}catch(Exception e) {throw newIOException(e);

}

HttpsURLConnection connHttps=(HttpsURLConnection) url

.openConnection();

connHttps.setSSLSocketFactory(ctx.getSocketFactory());

connHttps.setHostnameVerifier(newHostnameVerifier() {public booleanverify(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.Entryentry : headerMap.entrySet()) {

conn.setRequestProperty(entry.getKey(), entry.getValue());

}

}returnconn;

}privateString getResponseAsString(HttpURLConnection conn)throwsIOException {

InputStream es=conn.getErrorStream();if (es == null) {returngetStreamAsString(conn.getInputStream(), charset, conn);

}else{

String msg=getStreamAsString(es, charset, conn);if(StringUtils.isEmpty(msg)) {throw new IOException(conn.getResponseCode() + ":"

+conn.getResponseMessage());

}else{returnmsg;

}

}

}privateString getStreamAsString(InputStream stream, String charset,

HttpURLConnection conn)throwsIOException {try{

Reader reader= newInputStreamReader(stream, charset);

StringBuilder response= newStringBuilder();final char[] buff = new char[1024];int read = 0;while ((read = reader.read(buff)) > 0) {

response.append(buff,0, read);

}returnresponse.toString();

}finally{if (stream != null) {

stream.close();

}

}

}private String buildQuery(Map params) throwsIOException {if (params == null ||params.isEmpty()) {return "";

}

StringBuilder query= newStringBuilder();

Set> entries =params.entrySet();boolean hasParam = false;for (Map.Entryentry : 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));

}returnquery.toString();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值