java忽略代理设置

标签 java proxy

我已经为请求日志设置了一个本地代理服务器,但我的 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/

相关文章:

java - 连接到 Microsoft Azure 媒体服务时如何使用网络代理

linux - 通过 bash 脚本为 Linux 服务器设置代理失败

Java - JSON 空异常

java - 测量多线程 Java 应用程序的执行时间

java - 如何从 HTMLEditorKit 获取特定操作?

c# - 如何测试代理服务器是否正常工作?

python - 如何将代理身份验证传递给 python 请求模块

proxy - 亚马逊 aws 上的故障转移代理?

google-app-engine - 如何使用 Java API 将超过 32Mb 的文件上传到谷歌云存储

Java - 从Panel1更改为Panel2