首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何使Apache Commons HttpClient 3.1忽略HTTPS证书无效?

关于如何使Apache Commons HttpClient 3.1忽略HTTPS证书无效,我们可以通过以下几个步骤来实现:

  1. 首先,需要导入Apache Commons HttpClient 3.1相关的依赖库,如下所示:
代码语言:xml<dependency>
复制
   <groupId>commons-httpclient</groupId>
   <artifactId>commons-httpclient</artifactId>
   <version>3.1</version>
</dependency>
  1. 接下来,我们需要创建一个自定义的SecureProtocolSocketFactory,用于忽略HTTPS证书验证。以下是一个简单的实现:
代码语言:java
复制
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

public class TrustAllProtocolSocketFactory implements ProtocolSocketFactory {

    private SSLContext sslContext = null;

    public TrustAllProtocolSocketFactory() {
        try {
            this.sslContext = SSLContext.getInstance("SSL");
            this.sslContext.init(null, new TrustManager[]{new TrustAllTrustManager()}, null);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public Socket createSocket(String host, int port, InetAddress localAddress, int localPort) throws IOException {
        return this.sslContext.getSocketFactory().createSocket(host, port, localAddress, localPort);
    }

    @Override
    public Socket createSocket(String host, int port, InetAddress localAddress, int localPort, HttpConnectionParams params) throws IOException {
        return this.sslContext.getSocketFactory().createSocket(host, port, localAddress, localPort);
    }

    @Override
    public Socket createSocket(String host, int port) throws IOException {
        return this.sslContext.getSocketFactory().createSocket(host, port);
    }

    private static class TrustAllTrustManager implements 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 new X509Certificate[0];
        }
    }
}
  1. 然后,我们需要将自定义的TrustAllProtocolSocketFactory注册到Apache Commons HttpClient 3.1中,以便在使用HTTPS时忽略证书验证。以下是如何注册自定义的TrustAllProtocolSocketFactory的示例:
代码语言:java
复制
import org.apache.commons.httpclient.protocol.Protocol;
import org.apache.commons.httpclient.protocol.ProtocolSocketFactory;

public class HttpClientUtils {

    public static void registerTrustAllProtocolSocketFactory() {
        ProtocolSocketFactory protocolSocketFactory = new TrustAllProtocolSocketFactory();
        Protocol.registerProtocol("https", new Protocol("https", (ProtocolSocketFactory) protocolSocketFactory, 443));
    }
}
  1. 最后,在使用Apache Commons HttpClient 3.1之前,我们需要调用HttpClientUtils.registerTrustAllProtocolSocketFactory()方法来注册自定义的TrustAllProtocolSocketFactory。这样,Apache Commons HttpClient 3.1就会在使用HTTPS时忽略证书验证了。

请注意,这种方法会导致所有HTTPS连接都不进行证书验证,因此存在安全风险。在实际生产环境中,请务必谨慎使用。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • HTTPClient和CloseableHttpClient

    使用HttpClient发送请求的一般步骤 (1) 创建HttpClient对象。 (2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。 (3) 如果需要发送请求参数,可调用HttpGet同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。 (4) 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。 (5) 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 (6) 释放连接。无论执行方法是否成功,都必须释放连接

    01

    如何解决爬虫程序返回429

    作为爬虫,在采集数据的过程中我们会遇到很多的状态码,不同的状态码代表不同的意思。那么我们今天就重点来了解下爬虫程序返回429意味着什么? 我们就以淘宝为例进行分析,淘宝的反爬机制大家都懂,不是一般的严格,挂代理是最基本的要求。但是也需要配合更多的反爬策略一起进行才能有理想的效果。我们先来展示下访问淘宝的代码示例。 import org.apache.commons.httpclient.Credentials; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.UsernamePasswordCredentials; import org.apache.commons.httpclient.auth.AuthScope; import org.apache.commons.httpclient.methods.GetMethod;

    01
    领券