2010-08-07 84 views
5

我們有幾個不同的網站在同一臺服務器上運行,它們都訪問1個特定的Web服務,每個服務都有自己唯一的API密鑰。不幸的是,Web服務每日限制基於IP地址(而不是API密鑰),因此,儘管我們的每個站點都處於每日限制之下,但它們都超過了IP限制。當通過網絡瀏覽器訪問時,每個網站都運行在不同的靜態IP地址上,但是當perl腳本在每個網站用戶帳戶的下運行時,其出站IP地址是相同的。在Perl中使用不同的出站IP地址

我的問題是我該如何使每個perl腳本使用特定站點的正確IP地址,以便每個人都可以停留在web服務的每日限制內?更簡單地說,perl腳本如何更改使用LWP perl模塊進行的調用的出站IP地址?解釋很棒,但代碼示例會更好。

在此先感謝您的幫助!

+0

這個問題是關於繞過網站的安全機制和欺騙的IP地址。從我正在閱讀的網站沒有一個單獨的IP地址。 – xenoterracide 2010-08-07 22:25:24

+0

@Xeno:他指定「每個網站運行在不同的靜態IP地址上」。 – 2010-08-07 22:29:43

+0

@Jim哦我讀錯了...... – xenoterracide 2010-08-08 00:27:23

回答

9

使用LWP::UserAgent,你可以簡單地使用'local_address「」的方法來決定哪些IP地址要用於傳出連接:

my $ua = new LWP::UserAgent; 
$ua->local_address("10.10.10.10"); 
my $response = $ua->get("http://stackoverflow.com/"); 
+3

您也可以將'local_address'作爲參數傳遞給UA構造函數。 (注意:你應該使用'LWP :: UserAgent-> new'來代替'new LWP :: UserAgent',最好避免間接的對象語法。) – cjm 2010-08-07 23:42:11

+0

像魅力一樣工作。多謝你們! – 2010-08-08 01:33:01

+0

如果沒有指定本地地址會怎麼樣?如果有多個地址,LWP如何選擇一個地址?這是一個隨機選擇,循環賽等? – MadHacker 2016-10-26 13:35:14