当尝试确定 HttpURLConnection 是否正在使用代理时,以下代码可能会错误地返回 false:
conn = new URL(urlString).openConnection(); System.out.println("Proxy? " + conn.usingProxy());
尽管通过代理服务器连接,但仍会发生此行为。 Java 虚拟机 (JVM) 通常从操作系统设置中检索代理信息。但是,在某些情况下,JVM 可能不知道代理配置。
为了确保 HttpURLConnection 使用适当的代理,有必要显式提供代理信息。这可以通过构造一个 Proxy 实例并将其传递给 openConnection(proxy) 方法来实现:
//Proxy instance, proxy ip = 10.0.0.1 with port 8080 Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("10.0.0.1", 8080)); conn = new URL(urlString).openConnection(proxy);
如果代理需要身份验证,则 HttpURLConnection 将响应407 响应代码。要解决此问题,可以按如下方式配置身份验证器:
Authenticator authenticator = new Authenticator() { public PasswordAuthentication getPasswordAuthentication() { return (new PasswordAuthentication("user", "password".toCharArray())); } }; Authenticator.setDefault(authenticator);
以上是如何确保 HttpURLConnection 使用代理并处理身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!