Как использовать SOCKS в Java? - PullRequest
8 голосов
/ 18 апреля 2011

Я использую 100% рабочие носки и не могу подключиться через свое приложение. <pre> SocketAddress proxyAddr = new InetSocketAddress("1.1.1.1", 12345); Proxy pr = new Proxy(Proxy.Type.SOCKS, proxyAddr);</p> <pre><code> 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.

Ответы [ 3 ]

17 голосов
/ 25 августа 2012

Это действительно легко.Вам просто нужно установить соответствующие свойства системы и просто продолжить обычную HttpConnection.

System.getProperties().put( "proxySet", "true" );
System.getProperties().put( "socksProxyHost", "127.0.0.1" );
System.getProperties().put( "socksProxyPort", "1234" );
2 голосов
/ 01 декабря 2017

Информируйте аргументы VM socksProxyHost и socksProxyPort.

например

java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=8080 org.example.Main
2 голосов
/ 07 декабря 2015

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-прокси.В противном случае он устанавливает прямое соединение.

Странно, но поддержка SOCKS-прокси с использованием HttpURLConnection отсутствует.Хуже того, код даже не использует неподдерживаемый прокси и просто игнорирует прокси!

Почему прокси SOCKS не поддерживаются по крайней мере после 10 лет существования этого класса, объяснить невозможно.

...