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)); }}
新闻热点
疑难解答