2010-03-15 41 views
-3

基本上,我有一个应用程序刮。 它每分钟刮n件物品。 目前我只有一个IP。刮多个IP,在java

我正在抓取的网站允许我为每个IP 3个连接。

我在考虑获得另一个IP。

所以我将能够获得6个连接。

理论上我应该可以在40秒内或多或少地获得n个物品。

目前我使用java(commons-httpcore)来完成工作。

我不确定这是java问题还是操作系统问题。

我的机器有IP 1和IP 2 我该如何连接到使用IP 1和使用IP2的www.microsoft.com, ? 我怎么能指定,我想用来做连接的IP?

+9

是否想过你,他们限制每个IP,因为他们不想让你做这样的事情的连接数? – RHSeeger 2010-03-15 14:05:51

+0

这是否因为这是关于网页抓取而被低估? (这不完全合法?) – 2010-03-15 14:05:54

+0

RHSeeger说什么。 – 2010-03-15 14:11:33

回答

2
// requires HttpComponents Client 4.* 
DefaultHttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(
    ConnRoutePNames.LOCAL_ADDRESS, 
    InetAddress.getByName("10.10.10.10") 
); 

参见:http://hc.apache.org/httpcomponents-client/httpclient/apidocs/index.html

+0

这只会工作,如果服务器足够天真足以基于IP节流IP由客户端放置在http头中。换句话说:不太可能。 – 2010-03-15 14:28:49

+1

写得很好的应用程序有一些netscalars /或一些路由器配置,他们“物理上”实际上查找您的IP地址(而不是您在标题字段中设置的)。我在赌博行业工作,这是一个法律要求做到这一点(阻止来自某些国家的投注) – 2010-03-15 14:31:55

+0

@david我认为你已经使用ConnRoutePNames在4.x中混合了一些httpclient 3.x @matt @calm。 LOCAL_ADDRESS'不设置任何头,但实际上允许设置使用的IP地址(内部使用'Socket.bind(SocketAddress)')。 – sfussenegger 2010-03-15 15:01:55