Прокси-сервер Java Socks v4

Можете ли вы мне помочь, у меня та же проблема, что описана здесь: http://bugs.java.com/view_bug.do?bug_id=6964547

Java хорошо работает с прокси Socks 5, но с прокси socks 4:

java.net.SocketException: Malformed reply from SOCKS server

Источник вроде: URL obj = новый URL(url);

        con = (HttpURLConnection) obj.openConnection(new Proxy(Proxy.Type.SOCKS, new InetSocketAddress("host", *port*));


        con.setConnectTimeout(Config.CONNECT_TIMEOUT);
        con.setReadTimeout(Config.READ_TIMEOUT);


        con.setRequestProperty("User-Agent", Config.USER_AGENT);

        con.setDoOutput(false);
        con.setDoInput(true);

        con.setRequestMethod("GET");


        con.connect();

Я проверил много прокси v4, они не работают. Также не помогает добавление реквизита:

System.setProperty("socksProxyVersion", "4");

Есть идеи по поводу этой проблемы?:D

Спасибо за помощь.


person crook    schedule 04.02.2014    source источник
comment
Нет такого свойства, как socksProxyVersion. См. Java Networking and Proxy. .   -  person user207421    schedule 05.02.2014


Ответы (2)


В JDK 7 они добавили свойство socksProxyVersion, но вы не можете установить его для отдельных соединений.

Предложенное свойство socksProxyVersion не влияет на прокси-серверы SOCKS, установленные программно через java.net.Proxy.

person user3280587    schedule 13.02.2014

Я использовал это, это работает очень хорошо:

Socket s;
try {
    s = new Socket(new Proxy(Proxy.Type.SOCKS, proxy));
    s.setSoTimeout(5000);
    s.connect(google);
    s.close();
} catch(Throwable t) {
    s = new Socket(new Proxy(Proxy.Type.SOCKS, proxy));
    Method m = s.getClass().getDeclaredMethod("getImpl");
    m.setAccessible(true);
    Object sd = m.invoke(s);
    m = sd.getClass().getDeclaredMethod("setV4");
    m.setAccessible(true);
    m.invoke(sd);
    s.setSoTimeout(5000);
    s.connect(google);
    s.close();
}
person barwnikk    schedule 01.09.2014