3

LWPで作成されたHTTPリクエストから未加工の変更されていない応答ヘッダーを取得する方法はありますか?これは、不正な形式のヘッダーの問題を特定する必要がある診断ツール用です。

私が見つけた最も近いものは次のとおりです。

use LWP::UserAgent;
my $ua = new LWP::UserAgent;
my $response = $ua->get("http://somedomain.com");
print $response->headers()->as_string();

しかし、これは実際にヘッダーを解析し、解析されたデータから正規化され、クリーンアップされたバージョンのヘッダーを再構築します。サーバーから返された形式のヘッダーテキスト全体が本当に必要なので、不正な形式や標準外のものは明確に識別できます。

LWPでこれを行う方法がないことが判明した場合、これを行うことができる他のPerlモジュールはおそらくありますか?

4

2 に答える 2

6

Net :: HTTPは、より少ない処理でより低いレベルのアクセスを提供します。これはIO::Socket :: INETのサブクラスであるため、要求を行った後、オブジェクトから直接読み取ることができます。

use Net::HTTP;

# Make the request using Net::HTTP.
my $s = Net::HTTP->new(Host => "www.perl.com") || die $@;
$s->write_request(GET => "/", 'User-Agent' => "Mozilla/5.0");

# Read the raw headers.
my @headers;
while(my $line = <$s>) {
    # Headers are done on a blank line.
    last unless $line =~ /\S/;
    push @headers, $line;
}
print @headers;
于 2012-11-21T03:55:39.270 に答える
2

HTTP::Responseオブジェクト(およびオブジェクトに含まれるオブジェクト)の検査に基づいてHTTP::Headers、ヘッダーは解析時に破棄されます。

代わりに試してみることをお勧めしますWWW::Curl

WWW::Curlを使用してSnippetを編集します。

use WWW::Curl::Easy;

my ($header, $body);

my $curl = WWW::Curl::Easy->new;
$curl->setopt(CURLOPT_URL, $url_to_get); # get this URL
$curl->setopt(CURLOPT_WRITEHEADER, \$header); # save header text in this var
$curl->setopt(CURLOPT_WRITEDATA, \$body); # save body text in this var

my $code = $curl->perform;
if (0 == $code) {
  # header text is in $header, body text in $body 
} else {
  print $curl->strerror($code).": ".$curl->errbuf."\n";
}
于 2012-11-21T03:18:34.087 に答える