LWP::UserAgentを使用して多くのページコンテンツをリクエストしています。要求しているURLのIPをすでに知っているので、要求しているURLがホストされている場所のIPアドレスを指定できるようにしたいので、LWPはDNSルックアップに時間を費やす必要がありません。ドキュメントを調べましたが、解決策が見つかりませんでした。誰かがこれを行う方法を知っていますか?ありがとう!
2664 次
3 に答える
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;
}
于 2012-09-15T00:38:38.337 に答える
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;
}
于 2012-09-15T00:02:23.173 に答える
-3
ドメイン名をURLの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;
}
于 2012-09-15T00:01:33.520 に答える