-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
淘飞
committed
Oct 21, 2016
1 parent
4245428
commit 83456a7
Showing
1 changed file
with
312 additions
and
0 deletions.
There are no files selected for viewing
312 changes: 312 additions & 0 deletions
312
src/main/java/com/aliyun/api/gateway/demo/util/HttpUtils.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,312 @@ | ||
package com.aliyun.api.gateway.demo.util; | ||
|
||
import java.io.UnsupportedEncodingException; | ||
import java.net.URLEncoder; | ||
import java.security.KeyManagementException; | ||
import java.security.NoSuchAlgorithmException; | ||
import java.security.cert.X509Certificate; | ||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import javax.net.ssl.SSLContext; | ||
import javax.net.ssl.TrustManager; | ||
import javax.net.ssl.X509TrustManager; | ||
|
||
import org.apache.commons.lang.StringUtils; | ||
import org.apache.http.HttpResponse; | ||
import org.apache.http.NameValuePair; | ||
import org.apache.http.client.HttpClient; | ||
import org.apache.http.client.entity.UrlEncodedFormEntity; | ||
import org.apache.http.client.methods.HttpDelete; | ||
import org.apache.http.client.methods.HttpGet; | ||
import org.apache.http.client.methods.HttpPost; | ||
import org.apache.http.client.methods.HttpPut; | ||
import org.apache.http.conn.ClientConnectionManager; | ||
import org.apache.http.conn.scheme.Scheme; | ||
import org.apache.http.conn.scheme.SchemeRegistry; | ||
import org.apache.http.conn.ssl.SSLSocketFactory; | ||
import org.apache.http.entity.ByteArrayEntity; | ||
import org.apache.http.entity.StringEntity; | ||
import org.apache.http.impl.client.DefaultHttpClient; | ||
import org.apache.http.message.BasicNameValuePair; | ||
|
||
public class HttpUtils { | ||
|
||
/** | ||
* get | ||
* | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doGet(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpGet request = new HttpGet(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* post form | ||
* | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @param bodys | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doPost(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys, | ||
Map<String, String> bodys) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpPost request = new HttpPost(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
if (bodys != null) { | ||
List<NameValuePair> nameValuePairList = new ArrayList<NameValuePair>(); | ||
|
||
for (String key : bodys.keySet()) { | ||
nameValuePairList.add(new BasicNameValuePair(key, bodys.get(key))); | ||
} | ||
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(nameValuePairList, "utf-8"); | ||
formEntity.setContentType("application/x-www-form-urlencoded; charset=UTF-8"); | ||
request.setEntity(formEntity); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* Post String | ||
* | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @param body | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doPost(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys, | ||
String body) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpPost request = new HttpPost(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
if (StringUtils.isNotBlank(body)) { | ||
request.setEntity(new StringEntity(body, "utf-8")); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* Post stream | ||
* | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @param body | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doPost(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys, | ||
byte[] body) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpPost request = new HttpPost(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
if (body != null) { | ||
request.setEntity(new ByteArrayEntity(body)); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* Put String | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @param body | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doPut(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys, | ||
String body) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpPut request = new HttpPut(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
if (StringUtils.isNotBlank(body)) { | ||
request.setEntity(new StringEntity(body, "utf-8")); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* Put stream | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @param body | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doPut(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys, | ||
byte[] body) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpPut request = new HttpPut(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
if (body != null) { | ||
request.setEntity(new ByteArrayEntity(body)); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
/** | ||
* Delete | ||
* | ||
* @param host | ||
* @param path | ||
* @param method | ||
* @param headers | ||
* @param querys | ||
* @return | ||
* @throws Exception | ||
*/ | ||
public static HttpResponse doDelete(String host, String path, String method, | ||
Map<String, String> headers, | ||
Map<String, String> querys) | ||
throws Exception { | ||
HttpClient httpClient = wrapClient(host); | ||
|
||
HttpDelete request = new HttpDelete(buildUrl(host, path, querys)); | ||
for (Map.Entry<String, String> e : headers.entrySet()) { | ||
request.addHeader(e.getKey(), e.getValue()); | ||
} | ||
|
||
return httpClient.execute(request); | ||
} | ||
|
||
private static String buildUrl(String host, String path, Map<String, String> querys) throws UnsupportedEncodingException { | ||
StringBuilder sbUrl = new StringBuilder(); | ||
sbUrl.append(host); | ||
if (!StringUtils.isBlank(path)) { | ||
sbUrl.append(path); | ||
} | ||
if (null != querys) { | ||
StringBuilder sbQuery = new StringBuilder(); | ||
for (Map.Entry<String, String> query : querys.entrySet()) { | ||
if (0 < sbQuery.length()) { | ||
sbQuery.append("&"); | ||
} | ||
if (StringUtils.isBlank(query.getKey()) && !StringUtils.isBlank(query.getValue())) { | ||
sbQuery.append(query.getValue()); | ||
} | ||
if (!StringUtils.isBlank(query.getKey())) { | ||
sbQuery.append(query.getKey()); | ||
if (!StringUtils.isBlank(query.getValue())) { | ||
sbQuery.append("="); | ||
sbQuery.append(URLEncoder.encode(query.getValue(), "utf-8")); | ||
} | ||
} | ||
} | ||
if (0 < sbQuery.length()) { | ||
sbUrl.append("?").append(sbQuery); | ||
} | ||
} | ||
|
||
return sbUrl.toString(); | ||
} | ||
|
||
private static HttpClient wrapClient(String host) { | ||
HttpClient httpClient = new DefaultHttpClient(); | ||
if (host.startsWith("https://")) { | ||
sslClient(httpClient); | ||
} | ||
|
||
return httpClient; | ||
} | ||
|
||
private static void sslClient(HttpClient httpClient) { | ||
try { | ||
SSLContext ctx = SSLContext.getInstance("TLS"); | ||
X509TrustManager tm = new X509TrustManager() { | ||
public X509Certificate[] getAcceptedIssuers() { | ||
return null; | ||
} | ||
public void checkClientTrusted(X509Certificate[] xcs, String str) { | ||
|
||
} | ||
public void checkServerTrusted(X509Certificate[] xcs, String str) { | ||
|
||
} | ||
}; | ||
ctx.init(null, new TrustManager[] { tm }, null); | ||
SSLSocketFactory ssf = new SSLSocketFactory(ctx); | ||
ssf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); | ||
ClientConnectionManager ccm = httpClient.getConnectionManager(); | ||
SchemeRegistry registry = ccm.getSchemeRegistry(); | ||
registry.register(new Scheme("https", 443, ssf)); | ||
} catch (KeyManagementException ex) { | ||
throw new RuntimeException(ex); | ||
} catch (NoSuchAlgorithmException ex) { | ||
throw new RuntimeException(ex); | ||
} | ||
} | ||
} |
83456a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
建议添加GZIP压缩解压支持
83456a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
thanks
83456a7
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SSLSocketFactory过时了,怎么办?