关于httpclient 请求https (如何绕过证书验证)

第一种方法,适用于httpclient4.X 里边有get和post两种方法供你发送请求使用。导入证书发送请求的在这里就不说了,,网上到处都是import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;import java.net.SocketAddress;import java.net.URI;import java.net.URISyntaxException;import java.net.URL;import java.net.URLConnection;import java.net.URLEncoder;import java.net.UnknownHostException;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import java.security.cert.CertificateException;import java.security.cert.X509Certificate;import javax.net.SocketFactory;import javax.net.ssl.HostnameVerifier;import javax.net.ssl.HttpsURLConnection;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSession;import javax.net.ssl.TrustManager;import javax.net.ssl.X509TrustManager;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.conn.ClientConnectionManager;import org.apache.http.conn.ConnectTimeoutException;import org.apache.http.conn.scheme.HostNameResolver;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.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.apache.http.params.HttpConnectionParams;import org.apache.http.protocol.HTTP;import org.apache.http.util.EntityUtils;/** author:haungxuebin* 云南新接口**/public class HttpClientSendPost {private static DefaultHttpClient client;/** * 访问https的网站 * @param httpclient */ private static void enableSSL(DefaultHttpClient httpclient){ //调用ssl try { SSLContext sslcontext = SSLContext.getInstance("TLS"); sslcontext.init(null, new TrustManager[] { truseAllManager }, null); SSLSocketFactory sf = new SSLSocketFactory(sslcontext); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); Scheme https = new Scheme("https", sf, 443); httpclient.getConnectionManager().getSchemeRegistry().register(https); } catch (Exception e) { e.printStackTrace(); } } /** * 重写验证方法,取消检测ssl */ private static TrustManager truseAllManager = new X509TrustManager(){ public void checkClientTrusted( java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } public void checkServerTrusted( java.security.cert.X509Certificate[] arg0, String arg1) throws CertificateException { // TODO Auto-generated method stub } public java.security.cert.X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } };/*** HTTP Client Object,used HttpClient Class before(version 3.x),but now the* HttpClient is an interface*/public static String sendXMLDataByGet(String url,String xml){ // 创建HttpClient实例 if (client == null) {// Create HttpClient Objectclient = new DefaultHttpClient();enableSSL(client);} StringBuilder urlString=new StringBuilder(); urlString.append(url); urlString.append("?"); System.out.println("getUTF8XMLString(xml):"+getUTF8XMLString(xml)); try {urlString.append(URLEncoder.encode( getUTF8XMLString(xml) , "UTF-8" ));} catch (UnsupportedEncodingException e2) {// TODO Auto-generated catch blocke2.printStackTrace();} String urlReq=urlString.toString(); // 创建Get方法实例 HttpGet httpsgets = new HttpGet(urlReq); String strRep="";try {HttpResponse response = client.execute(httpsgets); HttpEntity entity = response.getEntity();if (entity != null) {strRep = EntityUtils.toString(response.getEntity()); // Do not need the rest httpsgets.abort(); }} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalStateException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} return strRep; }/*** Send a XML-Formed string to HTTP Server by post method** @param url* the request URL string* @param xmlData* XML-Formed string ,will not check whether this string is* XML-Formed or not* @return the HTTP response status code ,like 200 represents OK,404 not* found* @throws IOException* @throws ClientProtocolException*/public static String sendXMLDataByPost(String url, String xmlData)throws ClientProtocolException, IOException {if (client == null) {// Create HttpClient Objectclient = new DefaultHttpClient();enableSSL(client);}client.getParams().setParameter("http.protocol.content-charset",HTTP.UTF_8);client.getParams().setParameter(HTTP.CONTENT_ENCODING, HTTP.UTF_8);client.getParams().setParameter(HTTP.CHARSET_PARAM, HTTP.UTF_8);client.getParams().setParameter(HTTP.DEFAULT_PROTOCOL_CHARSET,HTTP.UTF_8);// System.out.println(HTTP.UTF_8);// Send data by post method in HTTP protocol,use HttpPost instead of// PostMethod which was occurred in former version//System.out.println(url);HttpPost post = new HttpPost(url);post.getParams().setParameter("http.protocol.content-charset",HTTP.UTF_8);post.getParams().setParameter(HTTP.CONTENT_ENCODING, HTTP.UTF_8);post.getParams().setParameter(HTTP.CHARSET_PARAM, HTTP.UTF_8);post.getParams().setParameter(HTTP.DEFAULT_PROTOCOL_CHARSET, HTTP.UTF_8);// Construct a string entityStringEntity entity = new StringEntity(getUTF8XMLString(xmlData), "UTF-8");entity.setContentType("text/xml;charset=UTF-8");entity.setContentEncoding("UTF-8");// Set XML entitypost.setEntity(entity);// Set content type of request headerpost.setHeader("Content-Type", "text/xml;charset=UTF-8");// Execute request and get the responseHttpResponse response = client.execute(post);HttpEntity entityRep = response.getEntity();String strrep=""; if (entityRep != null) { strrep = EntityUtils.toString(response.getEntity()); // Do not need the rest post.abort(); } // Response Header – StatusLine – status code//statusCode = response.getStatusLine().getStatusCode();return strrep;}/*** Get XML String of utf-8** @return XML-Formed string*/public static String getUTF8XMLString(String xml) {// A StringBuffer ObjectStringBuffer sb = new StringBuffer();sb.append(xml);String xmString = "";try {xmString = new String(sb.toString().getBytes("UTF-8"));} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();}// return to String Formedreturn xmString.toString();}

}

第二种仿http的不用HttpClient 都是jdk自带的包

孜孜不倦的追求奋斗,加油。

关于httpclient 请求https (如何绕过证书验证)

相关文章:

你感兴趣的文章:

标签云: