是的,SOverflow中有类似的问题,但遗憾的是我没有找到任何解决方案 .

我的目标是:通过JAVA中的socks(v4 | 5)获取网址内容

我的示例代码:

String result = "";
        SocketAddress addr = new InetSocketAddress("180.211.179.30", 1080);
        Proxy proxy = new Proxy(Proxy.Type.SOCKS, addr);
        URL url = new URL("http://api.exip.org/?call=ip");
        URLConnection conn = url.openConnection(proxy);
        BufferedReader in = new BufferedReader(
                new InputStreamReader(
                conn.getInputStream()));

        StringBuilder response = new StringBuilder();
        String inputLine;

        while ((inputLine = in.readLine()) != null) {
            response.append(inputLine);
        }

        in.close();

        result = response.toString();
        System.out.println(result);

但它始终返回 "java.net.SocketException: Malformed reply from SOCKS server" ,而它与http(s)代理类型一起使用 .

线程“main”java.net.SocketException中的异常:java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:128)上的SOCKS服务器在java.net.SocksSocketImpl.connect(SocksSocketImpl.java:459)处的错误回复.net.Socket.connect(Socket.java:579)位于sun.net.www的sun.net.NetworkClient.doConnect(NetworkClient.java:180)的java.net.Socket.connect(Socket.java:528) . http.HttpClient.openServer(HttpClient.java:378)位于sun.net.www.http.HttpClient . (http:1.23 sun.net.www.http.HttpClient.New(HttpClient.java:290)at sun.net.www.http.HttpClient.New(HttpClient.java:306)at sun.net.www.protocol.http.HttpURLConnection . getNewHttpClient(HttpURLConnection.java:995)at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:974)at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:849)在sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection) .java:1299)at app.speedproxy.model.utils.TestJava.main(TestJava.java:33)Java结果:1

My system config: Ubuntu 12.04 with Oracle JVM

我已经尝试了appache的httpclient和scocketfactory实现,但同样的异常发生 . 如果你们中的任何人能够反思,我将不胜感激 . 谢谢 .