转载:https://blog.csdn.net/qq_36951116/article/details/91493376

直接复制下面两个方法,就可以使用代理发绕过证书验证的https请求了。

https请求时绕过ssl证书验证

/**
     * 绕过验证
     *
     * @return
     * @throws NoSuchAlgorithmException
     * @throws KeyManagementException
     */
    public static SSLContext createIgnoreVerifySSL() throws NoSuchAlgorithmException, KeyManagementException {
        SSLContext sc = SSLContext.getInstance("SSLv3");
 
        // 实现一个X509TrustManager接口,用于绕过验证,不用修改里面的方法
        X509TrustManager trustManager = new X509TrustManager() {
            @Override
            public void checkClientTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }
 
            @Override
            public void checkServerTrusted(
                    java.security.cert.X509Certificate[] paramArrayOfX509Certificate,
                    String paramString) throws CertificateException {
            }
 
            @Override
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
 
        sc.init(null, new TrustManager[] { trustManager }, null);
        return sc;
    }

 

HttpClient  post请求:

 

 private static String doPost(String url, Map<String, String> headers, Map<String, String> param) throws Exception {
        HttpPost httpPost = new HttpPost(url);
//**************这两行代码是设置请求的代理ip与端口
        RequestConfig requestConfig = RequestConfig.custom().setProxy(new HttpHost("127.0.0.1", 8888)).build();
 
        httpPost.setConfig(requestConfig);
//**********************
        if (headers != null) {
            headers.forEach(httpPost::setHeader);
        }
 
        if (param != null) {
            List<NameValuePair> pairList = (List)param.entrySet().stream().map((e) -> {
                return new BasicNameValuePair((String)e.getKey(), (String)e.getValue());
            }).collect(Collectors.toList());
            httpPost.setEntity(new UrlEncodedFormEntity(pairList, "UTF-8"));
        }
//*********************这一段是为了绕过ssl验证****************
        //采用绕过验证的方式处理https请求
        SSLContext sslcontext = createIgnoreVerifySSL();
 
        // 设置协议http和https对应的处理socket链接工厂的对象
        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
                .register("http", PlainConnectionSocketFactory.INSTANCE)
                .register("https", new SSLConnectionSocketFactory(sslcontext))
                .build();
        PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
        HttpClients.custom().setConnectionManager(connManager);
 
        //创建自定义的httpclient对象
        CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
//***********************************
 
//如果不需要绕过ssl验证,使用下面这一行获取的httpclient就行
//       CloseableHttpClient httpClient = HttpClients.createDefault();
 
        Throwable var5 = null;
 
        Object var8;
        try {
            CloseableHttpResponse response = httpClient.execute(httpPost);
            Throwable var7 = null;
 
            try {
                var8 = EntityUtils.toString(response.getEntity());
            } catch (Throwable var31) {
                var8 = var31;
                var7 = var31;
                throw var31;
            } finally {
                if (response != null) {
                    if (var7 != null) {
                        try {
                            response.close();
                        } catch (Throwable var30) {
                            var7.addSuppressed(var30);
                        }
                    } else {
                        response.close();
                    }
                }
 
            }
        } catch (Throwable var33) {
            var5 = var33;
            throw var33;
        } finally {
            if (httpClient != null) {
                if (var5 != null) {
                    try {
                        httpClient.close();
                    } catch (Throwable var29) {
                        var5.addSuppressed(var29);
                    }
                } else {
                    httpClient.close();
                }
            }
 
        }
 
        return (String)var8;
    }

 

posted on 2019-11-07 15:09  Sincerity  阅读(734)  评论(0)    收藏  举报