src*_*ulo 0 ip dns perl lwp lwp-useragent
我正在使用LWP :: UserAgent请求大量页面内容.我已经知道我要求的网址的IP,所以我希望能够指定我请求的网址所在的IP地址,这样LWP就不必花时间进行dns查找.我查看了文档,但没有找到任何解决方案.有谁知道这样做的方法?谢谢!
所以我找到了一个完全符合我要求的模块: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;
}
Run Code Online (Sandbox Code Playgroud)
嗯,你的系统应该已经缓存了DNS响应.您确定此优化会有所帮助吗?
选项1.
使用
http://192.0.43.10/
Run Code Online (Sandbox Code Playgroud)
代替
http://www.example.org/
Run Code Online (Sandbox Code Playgroud)
当然,如果服务器执行基于名称的虚拟主机,则会失败.
选项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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2315 次 |
| 最近记录: |