SOCK是TCP / IP级别的代理协议,而不是HTTP。开箱即用不支持HttpClient。
可以使用自定义连接套接字工厂自定义HttpClient以通过SOCKS代理建立连接
编辑: 更改为SSL而不是普通套接字
Registry<ConnectionSocketFactory> reg = RegistryBuilder.<ConnectionSocketFactory>create() .register("http", PlainConnectionSocketFactory.INSTANCE) .register("https", new MyConnectionSocketFactory(SSLContexts.createSystemDefault())) .build();PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager(reg);CloseableHttpClient httpclient = HttpClients.custom() .setConnectionManager(cm) .build();try { InetSocketAddress socksaddr = new InetSocketAddress("mysockshost", 1234); HttpClientContext context = HttpClientContext.create(); context.setAttribute("socks.address", socksaddr); HttpHost target = new HttpHost("localhost", 80, "http"); HttpGet request = new HttpGet("/"); System.out.println("Executing request " + request + " to " + target + " via SOCKS proxy " + socksaddr); CloseableHttpResponse response = httpclient.execute(target, request, context); try { System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); EntityUtils.consume(response.getEntity()); } finally { response.close(); }} finally { httpclient.close();}static class MyConnectionSocketFactory extends SSLConnectionSocketFactory { public MyConnectionSocketFactory(final SSLContext sslContext) { super(sslContext); } @Override public Socket createSocket(final HttpContext context) throws IOException { InetSocketAddress socksaddr = (InetSocketAddress) context.getAttribute("socks.address"); Proxy proxy = new Proxy(Proxy.Type.SOCKS, socksaddr); return new Socket(proxy); }}


