使用Apache HttpClient 5.0进行HTTPS代理连接时,如果遇到"没有隧道,除非连接"的错误,可以尝试以下解决方法:
确保使用的HttpClient版本为5.0或更高版本,因为之前的版本可能存在一些已知的代理问题。
确保已正确配置代理主机和端口。可以使用以下代码示例来设置代理:
CloseableHttpClient httpClient = HttpClients.custom()
.setProxy(new HttpHost("proxy_host", proxy_port))
.build();
请将"proxy_host"替换为实际的代理主机地址,将"proxy_port"替换为实际的代理端口号。
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(
new AuthScope("proxy_host", proxy_port),
new UsernamePasswordCredentials("username", "password"));
CloseableHttpClient httpClient = HttpClients.custom()
.setProxy(new HttpHost("proxy_host", proxy_port))
.setDefaultCredentialsProvider(credentialsProvider)
.build();
请将"proxy_host"和"proxy_port"替换为实际的代理主机地址和端口号,将"username"和"password"替换为实际的代理用户名和密码。
SSLContext sslContext = SSLContexts.custom()
.loadTrustMaterial(new TrustSelfSignedStrategy())
.build();
CloseableHttpClient httpClient = HttpClients.custom()
.setProxy(new HttpHost("proxy_host", proxy_port))
.setSSLContext(sslContext)
.build();
这将创建一个信任所有自签名证书的SSL上下文。请注意,这可能会使您的应用程序容易受到中间人攻击,所以请谨慎使用。
通过以上解决方法,您应该能够成功连接到HTTPS代理。但请记住,代理设置可能因网络环境而异,所以您可能需要根据实际情况进行调整。