2010-03-15 57 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