在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_httpsDemo"聚焦于如何使用`DefaultHttpClient`来实现HTTPS请求,并且绕过安全认证,这在特定场景下可能是必要的,比如测试环境或自签名证书的应用。 首先,理解HTTPS是HTTP(超文本传输...
《DefaultHttpClient的深度解析》 在Java开发中,网络通信是一个不可或缺的部分,而Apache HttpClient库则是其中的一个常用工具。特别是`DefaultHttpClient`类,它是HttpClient库中的核心组件,提供了丰富的HTTP...
"HttpClient绕过验证码直接抓取" HttpClient是一种常用的网络请求库,常用于网络爬虫、自动化测试、数据爬取等领域。今天,我们将讨论如何使用HttpClient绕过验证码直接抓取网站数据。 绕过验证码的原理 验证码是...
在Android开发中,与服务器进行通信是不可或缺的一部分,特别是对于HTTPS协议,它为网络通信提供了安全性和隐私保护。本文将详细介绍如何使用`HttpClient`和`HttpsURLConnection`两种方式来访问HTTPS网站,包括验证...
httpClient4.5配置SSL绕过https证书,httpClient过时替代方法-附件资源
本示例将深入探讨如何使用Tomcat搭建SSL(Secure Socket Layer)双向认证环境,以及通过Java原生类库SSLSocket进行编程,以及使用Apache的Httpclient库模拟安全的客户端请求。以下是对这些知识点的详细讲解。 首先...
import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.params.CoreConnectionPNames; import org.apache....
HttpClient httpClient = new DefaultHttpClient(); ``` **3. 设置HTTP请求参数** HttpClient允许我们创建`HttpGet`或`HttpPost`对象来设置URL和其他请求参数。例如,创建一个GET请求: ```java ...
在IT行业中,网络请求是应用程序与互联网交互的基础。在给定的标题"访问网络,请求图片"中,我们可以聚焦于...在实际开发中,我们还需要关注网络请求的安全性、性能优化和错误处理等方面,以提供稳定且高效的网络服务。
10. **安全性**:使用过时的HttpClient版本可能会暴露你的应用程序于已知的安全漏洞。因此,及时更新到最新版本对于保持应用程序的安全至关重要。 总之,面对HttpClient的过时问题,应该及时采取行动,升级到最新...
- **安全性问题**:绕过证书验证虽然简化了开发流程,但在生产环境中可能导致安全风险。建议使用有效的证书验证机制。 - **编码问题**:确保参数编码为UTF-8,以避免字符编码错误。 - **异常处理**:适当处理可能抛...
在Java编程中,HTTPS(Hypertext Transfer Protocol Secure)是一种用于在Web上安全传输数据的协议,它通过SSL/TLS(Secure Sockets Layer / Transport Layer Security)提供加密通信以及服务器身份验证。...
本篇将详细讲解如何使用HttpClient来访问服务器上的Servlet进行数据交换。 首先,为了在Android应用中发送HTTP请求,我们需要创建一个HttpClient对象。在这个例子中,我们使用了`DefaultHttpClient`,它是...
HTTPS协议需要SSL/TLS证书来确保数据的安全,而HttpClient需要忽略证书验证过程,以便与HTTPS服务器进行交互。 在本文中,我们将详细介绍如何使用JAVA的HttpClient库来发送POST请求,以便与HTTPS服务器进行交互。...
在Android开发中,为了保障数据传输的安全性,通常会使用HTTPS协议进行网络通信。HTTPS是HTTP(超文本传输协议)与SSL/TLS(安全套接层/传输层安全)的结合,它能提供身份验证、数据加密以及消息完整性检查,防止...
### 解析页面链接知识点 #### 一、使用Java与Jsoup进行页面链接解析 ##### 1. Jsoup简介 Jsoup 是一个用于处理实际世界 HTML 的 Java 库。它可以为 HTML 文档提供便利的 API 用于提取数据,即使 HTML 结构不完整...
DefaultHttpClient httpclient = new DefaultHttpClient(); HttpGet httpget = new HttpGet("http://example.com"); HttpResponse response = httpclient.execute(httpget); StatusLine statusLine = response....
WebView不仅支持加载本地HTML资源,还可以通过HTTP/HTTPS协议访问网络上的网页。本实训操作题将指导学生掌握WebView的基本使用以及如何利用HTTP协议访问网络。 1. **WebView的使用** - **初始化WebView**:在布局...
1. 绕过证书验证实现HTTPS: ```java SchemeRegistry schemeRegistry = new SchemeRegistry(); schemeRegistry.register(new Scheme("https", PlainSocketFactory.getSocketFactory(), 443)); ...