我使用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. 发送XML请求标签在LWP :: UserAgent
- 3. 为什么要通过要求LWP :: UserAgent而不是使用LWP :: UserAgent来导入LWP :: UserAgent?
- 4. PSGI,LWP :: UserAgent&PayPal IPN
- 5. LWP :: UserAgent请求方法的真正超时
- 6. LWP :: UserAgent不是线程安全的吗?
- 7. LWP :: UserAgent和登录凭证
- 8. 通过URL中的GET变量发送POST请求(使用LWP :: UserAgent)
- 9. 在Vanilla Perl CGI中克隆请求头文件到LWP UserAgent
- 10. 为什么LWP :: UserAgent GET请求使用HTTPS失败?
- 11. 如何使用LWP :: UserAgent在BOX API中发布发布请求?
- 12. 使用LWP :: Parallel :: UserAgent时,为什么不设置agent()?
- 13. 使用LWP :: UserAgent的代理的Perl HTTPS
- 14. 无法通过Perl的LWP :: UserAgent的
- 15. 为什么我不能为LWP :: UserAgent分配一个IP?
- 16. 如何在Perl的LWP :: UserAgent中设置传出IPv6地址?
- 17. Perl会话中的LWP :: UserAgent代理
- 18. LWP :: UserAgent的HTTP基本认证
- 19. LWP Useragent中的状态读取失败
- 20. 没有来自LWP请求的内容
- 21. Perl - LWP UserAgent错误的URL错误信息
- 22. HTTP ::使用LWP的perl中的请求:UserAgent进行身份验证:CRFS问题
- 23. 通过包无法找到对象的方法“ssl_opts”“LWP :: UserAgent的”
- 24. 如何让LWP :: UserAgent显示安装Flash?
- 25. 显示LWP :: UserAgent下载进度
- 26. 将LWP :: UserAgent从Perl转换为Ruby
- 27. 用mirror()和LWP :: UserAgent(Perl)下载
- 28. 欺骗IP与Perl LWP
- 29. 这个Perl代码使用LWP :: UserAgent在做什么?
- 30. LWP ::用户代理 - HTTP请求::
也许$ ua-> get('http:// IP_ADDRESS/REST_OF_URL'); ? – snoofkin
我认为这不会起作用,因为某些托管依赖于请求中使用的域名,并且如果该服务器用于托管多个域,则不知道将请求指向何处。 – srchulo
嗯......但你说“我已经知道我请求的网址的IP”......和@ soulSurfer2010,我只是说在你的URL中嵌入IP地址本身。你是否在反思这个问题,还是我们没有把握你的问题? – DavidRR