0

LWP::UserAgentを使用して多くのページコンテンツをリクエストしています。要求しているURLのIPをすでに知っているので、要求しているURLがホストされている場所のIPアドレスを指定できるようにしたいので、LWPはDNSルックアップに時間を費やす必要がありません。ドキュメントを調べましたが、解決策が見つかりませんでした。誰かがこれを行う方法を知っていますか?ありがとう!

4

3 に答える 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 に答える