在java中,使用DefaultHttpClient访问https下的链接,
DefaultHttpClient client = new DefaultHttpClient();
会有一个异常 javax.net.ssl.SSLHandshakeException:,这个异常则是https的安全认证所引发的。怎么来绕过安全认证实现访问https的链接呢?
直接上代码:
import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.security.KeyManagementException; import java.security.KeyStore; import java.security.KeyStoreException; import java.security.NoSuchAlgorithmException; import java.security.UnrecoverableKeyException; 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.ssl.SSLSocketFactory; /** * * @author * @data 2016年7月27日 上午11:29:34 * @see * @version 1.0 * */ @SuppressWarnings("deprecation") public class EasySSLSocketFactory extends SSLSocketFactory { SSLContext sslContext = SSLContext.getInstance("TLS"); public EasySSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException { super(truststore); TrustManager tm = new X509TrustManager() { public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { } public X509Certificate[] getAcceptedIssuers() { return null; } }; sslContext.init(null, new TrustManager[] { tm }, null); } @Override public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException { return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose); } @Override public Socket createSocket() throws IOException { return sslContext.getSocketFactory().createSocket(); } }
import java.security.KeyStore; import org.apache.http.HttpVersion; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.PlainSocketFactory; 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.impl.conn.tsccm.ThreadSafeClientConnManager; import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; import org.apache.http.protocol.HTTP; import com.kingdee.Factory.EasySSLSocketFactory; /** * HttpClient 绕过https * @author * @data 2016年7月27日 上午11:24:01 * @see * @version 1.0 * */ @SuppressWarnings("deprecation") public class HttpClientUtil { /** * 获取HttpClient * * @return */ public static DefaultHttpClient getNewHttpClient() { try { KeyStore trustStore = null; EasySSLSocketFactory sf = null; trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); trustStore.load(null, null); sf = new EasySSLSocketFactory(trustStore); sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); HttpParams params = new BasicHttpParams(); HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1); HttpProtocolParams.setContentCharset(params, HTTP.UTF_8); SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); registry.register(new Scheme("https", sf, 443)); ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry); return new DefaultHttpClient(ccm, params); } catch (Exception e) { return new DefaultHttpClient(); } } }
// 获取能够忽略https的安全验证的HttpClient DefaultHttpClient client = HttpClientUtil.getNewHttpClient();
相关推荐
DefaultHttpClient绕过安全认证访 DefaultHttpClient 请求绕过 https 实例
NULL 博文链接:https://username2.iteye.com/blog/1664995
httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache....
练习HttpClient的一个Demo
httpclient过时用的jar包 , 解决项目升级后httpclient过时程序报错
本实例描述了Android平台下使用Apache开源项目的HttpClient访问网络的示例。分别使用HttpClient下的两个子实现类,DefaultHttpClient和AndroidHttpClient分别进行演示。
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; 这些...
httpclient的jar包,包含DefaultHttpClient
《 httpClient及android 原生接口实现下载并显示图片》博客对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/17609771
做了一个android网络应用,要求用自己实现的webview去访问web网站,并且在远程登录成功之后把cookie写入到手机,保留用作以后的自动登录。找了好多资料。发觉读取cookies倒还用的很普遍,可是通过程序写cookie却没有...
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache....
android HTTPdemo,分别用HttpURLConnection类,和DefaultHttpClient类 实现了 POST、GET方法
HttpClient httpclient = new DefaultHttpClient(); HttpResponse httpResponse = httpclient.execute(httpRequest); //提交 int statusCode=httpResponse.getStatusLine().getStatusCode(); //获得结果码200是...
new Thread(new Runnable() { public void run() { // TODO Auto-generated method stub try { //设置连接超时 ... DefaultHttpClient httpclient = new DefaultHttpClient( httpParameters);
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils;
DefaultHttpClient client = new DefaultHttpClient(); HttpPost post = new HttpPost(url); JSONObject response = null; try { StringEntity s = new StringEntity(json.toString()); s.setContentEncoding...
java代码 代码如下: private void startUrlCheck(String username,String password) { HttpClient client = new DefaultHttpClient(); StringBuilder builder = new StringBuilder(); HttpGet myget = new Ht
// 访问网站数据库获取数据 private String connWeb(String url) { String str = ""; try { HttpGet request = new HttpGet(url); HttpClient httpClient = new DefaultHttpClient(); HttpResponse ...
org.apache.http的相关类,android高版本SDK需要用到,解决'The import org.apache.http.HttpEntity cannot be resolved'>等问题: ...> ★BasicNameValuePair ...> ★DefaultHttpClient cannot be resolved to a type