如何在Java中使用SOCKS?

| 我使用100%工作袜子,但无法通过应用程序进行连接。
        SocketAddress proxyAddr = new InetSocketAddress(\"1.1.1.1\", 12345);
        Proxy pr = new Proxy(Proxy.Type.SOCKS, proxyAddr);

    try
    {
        HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection(pr);
        con.setConnectTimeout(proxyTimeout * 1000);
        con.setReadTimeout(proxyTimeout * 1000);
        con.connect();

        System.out.println(con.usingProxy());
    }
    catch(IOException ex)
    {
        Logger.getLogger(Enter.class.getName()).log(Level.SEVERE, null, ex);
    }
那我在做什么错?如果我将HTTP与某些HTTP代理一起使用,则一切正常,但与SOCKS无关。     
已邀请:
这真的很容易。您只需要设置相关的系统属性,然后继续常规HttpConnection。
System.getProperties().put( \"proxySet\", \"true\" );
System.getProperties().put( \"socksProxyHost\", \"127.0.0.1\" );
System.getProperties().put( \"socksProxyPort\", \"1234\" );
    
通知\“ socksProxyHost \”和\“ socksProxyPort \” VM参数。 例如
java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8080 org.example.Main
    
http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/sun/net/www/http/HttpClient.java/?v=source 在深处,HttpClient用于HttpURLConnection。
if ((proxy != null) && (proxy.type() == Proxy.Type.HTTP)) {
   sun.net.www.URLConnection.setProxiedHost(host);
   privilegedOpenServer((InetSocketAddress) proxy.address());
   usingProxy = true;
   return;
} else {
   // make direct connection
   openServer(host, port);
   usingProxy = false;
   return;
}
在第476行,您可以看到唯一可接受的代理是HTTP代理。否则直接建立连接。 奇怪的是,不支持使用HttpURLConnection的SOCKS代理。更糟糕的是,该代码甚至没有使用不受支持的代理,而只是忽略了该代理! 为什么在此类存在至少10年后为何不支持SOCKS代理?     

要回复问题请先登录注册