如何在Java中为给定的IP地址添加无代理,就像在Mozilla中一样。

12

我正在通过URL在Java中读取XML,这是我的代码:

String web="example.com";
URL url = new URL(web);
URLConnection conn = url.openConnection();

conn.setDoOutput(true);
OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());

writer.write(ufx);
writer.flush();

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
   answer.append(line);
}
writer.close();
reader.close();

} catch (Exception e) {
   e.printStackTrace();
}

return answer.toString();

我的问题是我正在使用的网址被阻止了,而我想通过输入流读取来自该网站的数据。在Mozilla中删除无代理后,网站可以成功打开。 我该如何在Java中实现这一点?


虽然我已经回答了如何为Java设置代理的问题,但是我有点困惑。在你的问题标题中,你说“如何在Java中添加无代理”,但是在问题描述中,你又说“在Mozilla中删除无代理后,网页可以成功打开”,这似乎完全相反。那么你想要“代理”还是“无代理”? - Mustafa sabir
我不想为特定的IP地址使用代理。 - MorganM
3个回答

25

有一些系统属性可以指定Java使用的代理配置。 您可以将它们作为命令行参数传递,或在应用程序中的第一件事就设置它们:

java -Dhttp.proxyHost=1.1.1.1 -Dhttp.proxyPort=1234 -jar somejar.jar

请注意,还有更多的设置可供使用,您可以为http、https等不同协议设置不同的代理设置,并且还可以指定例外。

要定义例外(不使用代理),您可以使用http.nonProxyHosts系统属性,例如:

java -Dhttp.proxyHost=webcache.example.com -Dhttp.proxyPort=8080
    -Dhttp.nonProxyHosts="localhost|host.example.com" 

查看更多信息,请参阅官方Oracle文档。


4

由于您没有使用编程代理,因此它正在使用系统属性:

  • http.proxyHost
  • http.proxyPort
  • http.nonProxyHosts

您可以不设置它们或更新最后一个。

更新

重新阅读您的问题后,我实际上不确定您是想要使用代理还是不想使用代理。您能具体说明吗?无论如何,这些属性都可以帮助您,或者您可以查看URL.openConnection(Proxy)。


我不想为特定的IP地址使用代理。 - MorganM
那么就不要为jvm设置属性,也不要在最后一个属性中显式添加要绕过的主机。 - nablex
老兄,这是一个系统属性,只需在启动虚拟机时设置或不设置即可... - nablex
这是我得到的错误:java.io.IOException: 服务器返回的URL为HTTP响应代码500 - MorganM
这是我更改的代码部分:URLConnection conn = url.openConnection(Proxy.NO_PROXY); - MorganM

0

将以下代码添加到您的源代码中:

System.getProperties().put("http.proxyHost", "");
System.getProperties().put("http.proxyPort", "");
System.getProperties().put("http.proxyUser", "");
System.getProperties().put("http.proxyPassword", "");

由于您不想使用代理,因此可以将代理设置提供为空值

或者您可以使用Java控制面板更改设置:

在Java控制面板中,在“常规”选项卡下,单击“网络设置”。 选择“使用浏览器设置”复选框。 单击“确定”以保存更改。

属性参考


Java 控制面板中的设置仅影响小程序和 Java 网络启动应用程序,独立应用程序必须自行管理代理。 - Alexey Ivanov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接