私は 3 時間グーグルで検索しましたが、何も役に立ちませんでした。ログインとパスワードを使用して作業する必要のないソックス5を介していくつかのサイトに接続するWebClientがあります。
WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
wc.setProxyConfig(new ProxyConfig(socks.split(":")[0], Integer.parseInt(socks.split(":")[1]), true));
wc.setTimeout(30000);
wc.setCssEnabled(false);
wc.setJavaScriptEnabled(false);
等々。ログインまたはパスワードを必要としない、すべての生きているホストの次の例外を受け取ります。
java.net.SocketException: SOCKS : authentication failed
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:473)
at java.net.Socket.connect(Socket.java:579)
at com.gargoylesoftware.htmlunit.SocksSocketFactory.connectSocket(SocksSocketFactory.java:89)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:776)
at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:152)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1439)
at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1358)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:307)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:373)
at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:358)
at mus.Gucol.run(Gucol.java:49)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)
と
Dec 12, 2011 4:14:02 AM org.apache.http.impl.client.DefaultRequestDirector tryConnect
INFO: I/O exception (java.net.SocketException) caught when connecting to the target host: SOCKS : authentication failed
HtmlUnit 2.9。資格情報を使用しようとしました:
WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
wc.setProxyConfig(new ProxyConfig(socks.split(":")[0], Integer.parseInt(socks.split(":")[1]), true));
wc.setTimeout(30000);
wc.setCssEnabled(false);
wc.setJavaScriptEnabled(false);
final DefaultCredentialsProvider credentialsProvider = (DefaultCredentialsProvider) wc.getCredentialsProvider();
credentialsProvider.addCredentials("", "", socks.split(":")[0], Integer.parseInt(socks.split(":")[1]), null);
credentialsProvider.addProxyCredentials("", "");
wc.setCredentialsProvider(credentialsProvider);
しかし、それは意味がありません。そして、問題は HtmlUnit ではなく Java にあると思います。なぜなら、HtmlUrlConnection 経由でソックスを使用しようとしたところ、同じエラーが発生して泣いてしまうからです。みんな、それを機能させる方法は?この問題の解決に約 6 時間を費やしましたが、WebClient の「ウィンドウ」ごとに異なるソックスが必要なため、System.setProperty を使用できません。