dポイントプレゼントキャンペーン実施中!

PerlにてHTTPヘッダの情報を取得したいと考えています。

通常ならば、
$ENV{'<ヘッダ名称>'}
で取得できるはずなのですが、
今回取得しようとしているヘッダはHTTPの標準ヘッダではありません。

proxyサーバにてログインを行い認証されますと、
そのproxyサーバが独自にHTTPヘッダに値を追加する仕様になっています。

テストではJavaですとproxyが設定したヘッダ情報を取得できるのですが、
ことPerlになると取得することができません。
※Javaと今回動かすPerlは同一サーバで動かします。

HTTP標準以外のヘッダ情報はどのように取得すれば良いのでしょうか?
なお、PerlのVerは5.6.1、OSはLinuxです。

A 回答 (2件)

こんにちは、



>テストではJavaですとproxyが設定したヘッダ情報を取得できるのですが、
>ことPerlになると取得することができません。
>※Javaと今回動かすPerlは同一サーバで動かします。
もうJavaで実装されたかもしれませんが…

何かをサーバーへ要求した際のレスポンスヘッダが欲しいって事なんでしょうか?

>通常ならば、
>$ENV{'<ヘッダ名称>'}
>で取得できるはずなのですが、
そうなんですか?
専門家じゃないので分かりませんが。

ソケット作って要求したら、レスポンスを全て受け取る事が出来ると思いますけど。
http で HTMLを受け取る場合を、ざっと書くと
#! /usr/bin/perl
use strict;
use warnings;
use IO::Socket;

my $host = 'search.cpan.org';
my $url = 'http://search.cpan.org/';
my $port = 80;

my $socket = IO::Socket::INET->new("$host:$port") or die "socket error!";

print {$socket} << "END_OF_REQUEST";
GET $url HTTP/1.1
Host: $host
Connection: close

END_OF_REQUEST

$socket->flush();

while (<$socket>) {
print;
}

$socket->close;
__END__

の様な感じでしょうか。


もしくは、LWP::UserAgent が使えれば、
#! /usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;

my $ua = LWP::UserAgent->new;
#$ua->proxy('http', 'http://proxy:8080');
my $request = HTTP::Request->new(GET => 'http://search.cpan.org/');
my $response = $ua->request($request);
print $response->as_string;
__END__

の様な感じですかね。
いずれも表示してるだけですが、
正規表現とかで取り出すか、パーサを書くか、探すかして
欲しいヘッダ情報を切り出す感じになりますかね。
 (LWP::UserAgent の POD をざっと見た感じでは、ヘッダ情報をうまい事やってくれるメソッドがあるのか無いのか分かりませんでした。)


はずしてたらすみません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

説明不足で申し訳ございません。
>テストではJavaですと・・・
と書いた部分は、「JavaServletでは」ということです。
即ち、自分自身にアクセスしてきた時の情報を取得したいわけです。

g_p_様が回答していただきましたものになりますと、
他サーバへのアクセスになってしまいますが、
「LWP::UserAgent」というものを知りませんでしたので、
手がかりにしたいと思います。

ありがとうございました。

お礼日時:2007/08/20 09:46

こんにちは、


プロキシを通ってアクセスしてきたクライアントが送ってくるリクエストヘッダの事だったんですね。
クライアントとして、プロキシを通って受け取ったレスポンスヘッダの事だと思い込んでしまいました。
すみません。

HTTPって事は、apache 等のサーバーがクライアントのリクエストヘッダを処理しちゃうでしょうから、環境変数で渡してくれなかったら難しそうですね。

サーバーの設定とかで制御できるんでしょうかね、
その辺は全く分かりませんので
詳しい方の回答をお待ちになった方が良いかもですね。

サーバーを書いて別なポートで待ってればいいのかな…
とか一瞬思いかけて、自分には到底無理だと即効却下しました。

とにかく#1は無視してください、すみませんでした。
    • good
    • 0
この回答へのお礼

更なる回答、ありがとうございます。

#1の回答から「LWP::UserAgent」も含めて調査した結果、
サーバの設定ということが判明いたしました。

回答をくださいまして、誠にありがとうございました。

お礼日時:2007/08/21 15:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!