你可以帮助我,我遇到了与此处描述的问题相同的问题: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 =新网址(网址);
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
感谢您的帮助。
答案 0 :(得分:0)
使用JDK 7,他们确实添加了socksProxyVersion
属性,但您无法为单个连接设置它。
建议的socksProxyVersion
属性对通过java.net.Proxy
以编程方式设置的SOCKS代理没有任何影响。
答案 1 :(得分:0)
我用过它,效果非常好:
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();
}