转载: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; }
浙公网安备 33010602011771号