您的位置:首页 > 理论基础 > 计算机网络

HttpClient中GET、POST方法示例,支持 https

2017-02-06 11:57 363 查看
HttpClient中GET、POST方法示例,支持 HTTPS

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.HttpVersion;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils;

import net.sf.json.JSONObject;

public class HttpUtil {

public static String connectUrlNotCheckSsl(String url, String requestMethod, JSONObject param)
throws RuntimeException, GeneralSecurityException, IOException {
if (StringUtil.isNull(url)){
throw new RuntimeException("请求地址不能为空!");
}
if (url.endsWith("/") || url.endsWith("?") || url.endsWith("&")) {
url = url.substring(0, url.length() - 1);
}
if (url.length() <= 4) {
url = "http://" + url;
}
if (!"http".equalsIgnoreCase(url.substring(0, 4))) {
url = "http://" + url;
}

HttpParams httpParams = new BasicHttpParams();
httpParams.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
httpParams.setParameter(CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");
httpParams.setParameter(CoreProtocolPNames.USER_AGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko");

HttpClient httpClient = null;
if ("http:".equalsIgnoreCase(url.substring(0, 5))) {
httpClient = new DefaultHttpClient(httpParams);
} else {
httpClient = new SSLDefaultHttpClient(httpParams);
}
HttpResponse httpResponse = null;
if (StringUtil.isNotNull(requestMethod) && "post".equalsIgnoreCase(requestMethod)) { //post请求
HttpPost httpPost = new HttpPost(url);
if (param != null && !param.isEmpty()) {
List<NameValuePair> postParam = new ArrayList<NameValuePair>();
Iterator<?> it = param.keys();
while (it.hasNext()) {
String key = (String) it.next();
String value = param.getString(key);
postParam.add(new BasicNameValuePair(key, value));
}
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(postParam, "UTF-8");
httpPost.setEntity(entity);
}
httpResponse = httpClient.execute(httpPost);
} else { //get请求
if (param != null && !param.isEmpty()) {
StringBuffer sb = new StringBuffer();
Iterator<?> it = param.keys();
while (it.hasNext()) {
String key = (String) it.next();
String value = param.getString(key);
if (sb.length() <= 0) {
sb.append("?");
} else {
sb.append("&");
}
sb.append(key).append("=").append(value);
}
url += sb.toString();
}
HttpGet httpGet = new HttpGet(url);
httpResponse = httpClient.execute(httpGet);
}
int responseCode = httpResponse.getStatusLine().getStatusCode();
if (responseCode != HttpStatus.SC_OK){
throw new RuntimeException("请求响应失败,响应码:" + responseCode + "!");
}
HttpEntity httpEntity = httpResponse.getEntity();
return (httpEntity == null) ? null : EntityUtils.toString(httpEntity, "UTF-8");
}
}

import java.security.GeneralSecurityException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

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.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpParams;

public class SSLDefaultHttpClient extends DefaultHttpClient {
public SSLDefaultHttpClient(HttpParams httpParams) throws GeneralSecurityException {
super(httpParams);
SSLContext ctx = SSLContext.getInstance("TLS");
X509TrustManager tm = new X509TrustManager() {
@Override
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

@Override
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
}

@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
ctx.init(null, new TrustManager[] { tm }, null);
SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme("https", 443, ssf));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java HttpClient https