【问题标题】:How to use an HTTP proxy in java如何在 Java 中使用 HTTP 代理
【发布时间】:2011-06-03 18:01:06
【问题描述】:

我正在编写一个连接到网站并检查一些代码的代码,例如爬虫。但我需要通过代理连接并更改 IP 地址(因此它不会在服务器日志中显示客户端的 IP)。

这如何通过java来完成?

【问题讨论】:

  • 嗯,你听起来像是在做一件好事。

标签: java proxy ip


【解决方案1】:

您可以使用 java 系统属性来设置代理或将其作为命令行选项传递。

您可以找到一些详细信息和示例here

例如:打开连接之前

System.setProperty("http.proxyHost", "myProxyServer.com");
System.setProperty("http.proxyPort", "80");

或者您可以使用系统中配置的默认网络代理

System.setProperty("java.net.useSystemProxies", "true");

从 Java 1.5 开始,您可以创建代理实例并将其传递给 openConnection() 方法。

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

或者正如lisak 建议的那样,您可以使用一些可以更好地满足您的需求的第三方库。

【讨论】:

  • 您还应该注意 HTTPS 的代理配置使用稍微不同的属性,例如。 System.setProperty("https.proxyHost", "myProxyServer.com");。我想知道为什么这对我不起作用,那是因为我的代码使用 HTTPS。
  • 为什么根本没有 Proxy.Type.HTTPS(安全)常量?
【解决方案2】:

或者您也可以使用HttpClient,它会更好地满足您的需求。查看文档,它简短且内容丰富。

DefaultHttpClient httpclient = new DefaultHttpClient();

HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);

【讨论】:

  • 教程在这里:link
【解决方案3】:
Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("123.0.0.1", 8080));
URL url = new URL("http://www.yahoo.com");
HttpURLConnection uc = (HttpURLConnection)url.openConnection(proxy);
uc.connect();

这对我有用。我能够使用代理进行特定的连接或传输。之前我们使用 System.setProperty,它用于在系统级别设置它,并且所有内部/外部请求都使用相同的代理开始。

Proxy.Type.HTTP 也适用于 http 和 https

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-02
    • 2011-06-23
    • 2010-11-11
    • 1970-01-01
    相关资源
    最近更新 更多