我正在使用LWP::UserAgent来请求大量页面内容。我已经知道我要求的网址的IP,所以我希望能够指定我请求的网址所在的IP地址,这样LWP就不必花时间进行dns查找。我查看了文档,但没有找到任何解决方案。有谁知道这样做的方法?谢谢!
答案 0 :(得分:6)
嗯,您的系统应该已经缓存了DNS响应。您确定此优化会有所帮助吗?
选项1。
使用
http://192.0.43.10/
而不是
http://www.example.org/
当然,如果服务器执行基于名称的虚拟主机,则会失败。
选项2。
用缓存版本替换Socket::inet_aton
(从LWP :: Protocol :: http调用IO :: Socket :: INET调用)。
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 :(得分:-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;
}