คุณสมบัติเครือข่ายที่ตั้งค่าสำหรับพร็อกซี SOCKS และ Proxy.NO_PROXY เฉพาะ

การทดสอบง่ายๆ เพื่อบังคับให้เชื่อมต่อโดยตรงกับ toto.localhost.lan (ที่ให้บริการบนเครื่องของฉัน) เมื่อคุณสมบัติของระบบได้รับการกำหนดค่าให้ใช้พร็อกซี SOCKS

package net.wetope.launcher.tests;

import java.net.URL;
import java.net.URLConnection;
import junit.framework.TestCase;

public class AppTest extends TestCase {

  public void testFile() {
    try {
      System.setProperty("socksProxyHost", "127.0.0.1");
      System.setProperty("socksProxyPort", "9999");

      URL url = new URL("http://toto.localhost.lan/");
      URLConnection conn = url.openConnection(java.net.Proxy.NO_PROXY);
      conn.getInputStream();
    } catch (Exception e) {
      e.printStackTrace();
      fail();
    }
  }
}

การทดสอบนี้ส่งผลให้:

java.net.SocketException: Malformed reply from SOCKS server
Testsuite: net.wetope.launcher.tests.AppTest
Tests run: 1, Failures: 1, Errors: 0, Time elapsed: 0,094 sec

------------- Standard Error -----------------
java.net.SocketException: Malformed reply from SOCKS server
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:472)
 at java.net.Socket.connect(Socket.java:529)
 at java.net.Socket.connect(Socket.java:478)
 at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
 at sun.net.www.http.HttpClient.<init>(HttpClient.java:234)
 at sun.net.www.http.HttpClient.New(HttpClient.java:307)
 at sun.net.www.http.HttpClient.New(HttpClient.java:324)
 at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:949)
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:472)
 at net.wetope.launcher.tests.AppTest.testFile(AppTest.java:16)
 at java.net.Socket.connect(Socket.java:529)
 at java.net.Socket.connect(Socket.java:478 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
 at junit.framework.TestCase.runTest(TestCase.java:168)
 at sun.net.www.http.HttpClient.<init>(HttpClient.java:234)
 at junit.framework.TestCase.runBare(TestCase.java:134)
 at sun.net.www.http.HttpClient.New(HttpClient.java:307)
 at junit.framework.TestResult$1.protect(TestResult.java:110)
 at sun.net.www.http.HttpClient.New(HttpClient.java:324)
 at junit.framework.TestResult.runProtected(TestResult.java:128)
 at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
 at junit.framework.TestResult.run(TestResult.java:113)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:949)
 at junit.framework.TestCase.run(TestCase.java:124)
 at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
 at junit.framework.TestSuite.runTest(TestSuite.java:232)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
 at junit.framework.TestSuite.run(TestSuite.java:227)
 at net.wetope.launcher.tests.AppTest.testFile(AppTest.java:16)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)
 at java.lang.reflect.Method.invoke(Method.java:597)
 at junit.framework.TestCase.runTest(TestCase.java:168)
 at junit.framework.TestCase.runBare(TestCase.java:134)
 at junit.framework.TestResult$1.protect(TestResult.java:110)
 at junit.framework.TestResult.runProtected(TestResult.java:128)
 at junit.framework.TestResult.run(TestResult.java:113)
 at junit.framework.TestCase.run(TestCase.java:124)
 at junit.framework.TestSuite.runTest(TestSuite.java:232)
 at junit.framework.TestSuite.run(TestSuite.java:227)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:518)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1052)
 at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:906)
------------- ---------------- ---------------
Testcase: testFile(net.wetope.launcher.tests.AppTest):  FAILED
null
junit.framework.AssertionFailedError: null
 at net.wetope.launcher.tests.AppTest.testFile(AppTest.java:19)


Test net.wetope.launcher.tests.AppTest FAILED
test:
Deleting: /tmp/TEST-net.wetope.launcher.tests.AppTest.xml
BUILD SUCCESSFUL (total time: 1 second)

พยายามเชื่อมต่อผ่านพร็อกซี SOCKS แม้ว่าฉันจะระบุว่าใช้การเชื่อมต่อโดยตรงก็ตาม

มีความคิดอะไรบ้าง?

ขอบคุณ

แก้ไข: stacktrace ถูกล้างจาก jUnit:

java.net.SocketException: Malformed reply from SOCKS server
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at java.net.SocksSocketImpl.readSocksReply(SocksSocketImpl.java:90)
 at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:472)
 at java.net.Socket.connect(Socket.java:529)
 at java.net.Socket.connect(Socket.java:478)
 at sun.net.NetworkClient.doConnect(NetworkClient.java:163)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:395)
 at sun.net.www.http.HttpClient.openServer(HttpClient.java:530)
 at sun.net.www.http.HttpClient.<init>(HttpClient.java:234)
 at sun.net.www.http.HttpClient.New(HttpClient.java:307)
 at sun.net.www.http.HttpClient.New(HttpClient.java:324)
 at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970)
 at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:949)
 at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836)
 at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172)
 at net.wetope.launcher.tests.AppTest.testSmg(AppTest.java:16)

person pgmillon    schedule 15.12.2011    source แหล่งที่มา
comment
การติดตามสแต็กของคุณดูยุ่งเหยิง มีการทดสอบล้มเหลวมากกว่าหนึ่งครั้งหรือไม่? คุณสามารถเปลี่ยน e.printStackTrace() เป็น throw new RuntimeException(e) ได้ไหม   -  person artbristol    schedule 15.12.2011
comment
ฉันเพิ่งแก้ไขคำถามเพื่อเพิ่ม stacktrace ที่เคลียร์แล้ว   -  person pgmillon    schedule 16.12.2011
comment
@pgmillon: คุณได้รับวิธีแก้ไขปัญหานี้หรือไม่?   -  person Shashank Kadne    schedule 10.09.2012
comment
ตัวอย่างที่ดีมาก พบในขณะที่ค้นคว้าสิ่งนี้ ปัญหาคือการเชื่อมต่อผ่าน ProxySelector โดยไม่คำนึงถึง Proxy.NO_PROXY ฉันเชื่อว่าตัวอย่างของคุณสามารถจัดเป็นข้อบกพร่องของ JDK ได้   -  person peterh    schedule 07.11.2015