【发布时间】:2011-06-03 18:01:06
【问题描述】:
我正在编写一个连接到网站并检查一些代码的代码,例如爬虫。但我需要通过代理连接并更改 IP 地址(因此它不会在服务器日志中显示客户端的 IP)。
这如何通过java来完成?
【问题讨论】:
-
嗯,你听起来像是在做一件好事。
我正在编写一个连接到网站并检查一些代码的代码,例如爬虫。但我需要通过代理连接并更改 IP 地址(因此它不会在服务器日志中显示客户端的 IP)。
这如何通过java来完成?
【问题讨论】:
您可以使用 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 建议的那样,您可以使用一些可以更好地满足您的需求的第三方库。
【讨论】:
或者您也可以使用HttpClient,它会更好地满足您的需求。查看文档,它简短且内容丰富。
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpHost proxy = new HttpHost("someproxy", 8080);
httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
【讨论】:
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
【讨论】: