我使用LWP::UserAgent來請求大量的頁面內容。我已經知道我請求的網址的IP地址,所以我希望能夠指定我請求的網址的IP地址,以便LWP不必花時間進行DNS查找。我瀏覽過文檔,但沒有找到任何解決方案。有誰知道一種方法來做到這一點?謝謝!LWP :: UserAgent設置請求的URL的IP,以便LWP不必做DNS查找
0
A
回答
7
所以我發現,正是我要找的不模塊:LWP::UserAgent::DNS::Hosts
這裏是我測試和做什麼,我在我的問題指定的一個示例腳本:
#!/usr/bin/perl
use strict;
use LWP::UserAgent;
use LWP::UserAgent::DNS::Hosts;
LWP::UserAgent::DNS::Hosts->register_host(
'www.cpan.org' => '199.15.176.140',
);
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
#actually enforces new DNS settings as if they were in /etc/hosts
LWP::UserAgent::DNS::Hosts->enable_override;
my $response = $ua->get('http://www.cpan.org/');
if ($response->is_success) {
print $response->decoded_content; # or whatever
}
else {
die $response->status_line;
}
+2
**酷!建議的改進**:在調用'register_host'之前動態查找主機。 (作爲對'www.cpan.org'=>'199.15.176.140''中的IP地址進行硬編碼的替代方案。 – DavidRR
-3
只需在您的網址的IP地址替換域名:
use strict;
require LWP::UserAgent;
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
# my $response = $ua->get('http://stackoverflow.com/');
my $response = $ua->get('http://64.34.119.12/');
if ($response->is_success) {
print $response->decoded_content; # or whatever
}
else {
die $response->status_line;
}
6
哼,你的系統應該已經被緩存DNS響應。你確定這個優化會有幫助嗎?
選項1.
使用
http://192.0.43.10/
,而不是
http://www.example.org/
當然,如果服務器不基於域名的虛擬主機,將失敗。
選項2
替換Socket::inet_aton
(從IO稱爲::插座:: INET從LWP ::協議:: HTTP調用)與高速緩存版本。
use Socket qw();
BEGIN {
my $original = \&Socket::inet_aton;
my %cache;
my $caching = sub {
return $cache{$_[0]} //= $original->($_[0]);
};
no warnings 'redefine';
*Socket::inet_aton = $caching;
}
相關問題
- 1. 在LWP :: UserAgent中設置IP地址
- 2. 是否LWP :: UserAgent的做
- 3. 發送XML請求標籤在LWP :: UserAgent
- 4. 爲什麼要通過要求LWP :: UserAgent而不是使用LWP :: UserAgent來導入LWP :: UserAgent?
- 5. LWP UserAgent post @list
- 6. PSGI,LWP :: UserAgent&PayPal IPN
- 7. LWP :: Simple&LWP :: UserAgent不返回完整的網頁內容
- 8. LWP :: UserAgent不是線程安全的嗎?
- 9. LWP :: UserAgent請求方法的真正超時
- 10. 添加一個.zip文件到LWP :: UserAgent POST請求的主體
- 11. LWP :: UserAgent和登錄憑證
- 12. LWP :: UserAgent - 打印HTML內容
- 13. LWP :: UserAgent SendHub API問題
- 14. 通過URL中的GET變量發送POST請求(使用LWP :: UserAgent)
- 15. 如何使用LWP :: UserAgent在BOX API中發佈發佈請求?
- 16. 爲什麼LWP :: UserAgent GET請求使用HTTPS失敗?
- 17. 使用LWP :: Parallel :: UserAgent時,爲什麼不設置agent()?
- 18. 無法通過Perl的LWP :: UserAgent的
- 19. Nginx的Perl模塊,與LWP :: UserAgent的
- 20. 使用LWP :: UserAgent的代理的Perl HTTPS
- 21. 爲什麼我不能爲LWP :: UserAgent分配一個IP?
- 22. 如何在Perl的LWP :: UserAgent中設置傳出IPv6地址?
- 23. Perl會話中的LWP :: UserAgent代理
- 24. LWP Useragent中的狀態讀取失敗
- 25. 使用LWP :: UserAgent的圖像損壞
- 26. LWP :: UserAgent的超時與HTTP ::頭
- 27. LWP :: UserAgent的HTTP基本認證
- 28. 沒有來自LWP請求的內容
- 29. 什麼代碼檢查LWP :: UserAgent是否可以使用?
- 30. Perl - LWP UserAgent錯誤的URL錯誤信息
也許$ ua-> get('http:// IP_ADDRESS/REST_OF_URL'); ? – snoofkin
我認爲這不會起作用,因爲某些託管依賴於請求中使用的域名,並且如果該服務器用於託管多個域,則不知道將請求指向何處。 – srchulo
嗯......但你說「我已經知道我請求的網址的IP」......和@ soulSurfer2010,我只是說在你的URL中嵌入IP地址本身。你是否在反思這個問題,還是我們沒有把握你的問題? – DavidRR