gpt4 book ai didi

java忽略代理设置

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:28:52 26 4
gpt4 key购买 nike

我已经为请求日志设置了一个本地代理服务器,但我的 java 代码忽略了它并直接连接(Windows XP、JDK 1.7)。 Web 浏览器可以使用它。因此,我编写了用于讨论的测试代码,即使指定了(伪造的)代理,它似乎也可以直接连接。使用虚假代理,我预计连接失败但代码成功,直接连接:

System.setProperty("http.proxyHost", "localhost");
System.setProperty("http.proxyPort", "12345");
System.setProperty("http.nonProxyHosts", "noNonProxyHost.com");
URL url = new URL("http://docs.oracle.com/javase/7/docs/technotes/guides/net/proxies.html");
InputStream in = url.openStream();
System.out.println("Connection via bogus proxy succeeded");

代码作为独立的 Java 运行,没有 Maven,没有小程序,没有容器。我有直接的互联网连接。

最佳答案

在您使用 java.net.URL() 的情况下,如果无法通过 http.proxyHost 和 http.proxyPort 访问代理服务器,那么它只会回退并尝试进行直接连接。如果成功,您将看不到任何异常抛出,这就是您的代码可以正常运行的原因。不过,当它尝试查找代理时,您应该会看到暂停。
下面的示例代码很高兴地获取 URL 并显示它,没有错误,即使在使用虚假代理设置运行时也是如此。 -Dhttp.proxyHost=bogus -Dhttp.proxyPort=2345 但如果设置正确,将与我的本地代理 localhost 端口 8888 通信

import java.io.*;
import java.net.URL;
import java.util.*;
public class URLClient {
private static String sUrl = "http://www.apache.org/";
public static void main(String[] args) {
try {
URL url = new URL(sUrl);
InputStream is = url.openStream();
java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
String output = s.hasNext() ? s.next() : "";
System.out.println(output);
} catch(Throwable e) {
System.err.println("exception");
}
}
}

我最初遇到的 http.proxyHost 和 http.proxyPort 被忽略的问题(Google 让我想到了你的问题)是 apache.commons.httpClient 完全忽略了这些设置,因为它使用自己的套接字,如此处所述. http://cephas.net/blog/2007/11/14/java-commons-http-client-and-http-proxies/

关于java忽略代理设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004151/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com