
PerlにてHTTPヘッダの情報を取得したいと考えています。
通常ならば、
$ENV{'<ヘッダ名称>'}
で取得できるはずなのですが、
今回取得しようとしているヘッダはHTTPの標準ヘッダではありません。
proxyサーバにてログインを行い認証されますと、
そのproxyサーバが独自にHTTPヘッダに値を追加する仕様になっています。
テストではJavaですとproxyが設定したヘッダ情報を取得できるのですが、
ことPerlになると取得することができません。
※Javaと今回動かすPerlは同一サーバで動かします。
HTTP標準以外のヘッダ情報はどのように取得すれば良いのでしょうか?
なお、PerlのVerは5.6.1、OSはLinuxです。
No.1ベストアンサー
- 回答日時:
こんにちは、
>テストでは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 をざっと見た感じでは、ヘッダ情報をうまい事やってくれるメソッドがあるのか無いのか分かりませんでした。)
はずしてたらすみません。
ご回答ありがとうございます。
説明不足で申し訳ございません。
>テストではJavaですと・・・
と書いた部分は、「JavaServletでは」ということです。
即ち、自分自身にアクセスしてきた時の情報を取得したいわけです。
g_p_様が回答していただきましたものになりますと、
他サーバへのアクセスになってしまいますが、
「LWP::UserAgent」というものを知りませんでしたので、
手がかりにしたいと思います。
ありがとうございました。
No.2
- 回答日時:
こんにちは、
プロキシを通ってアクセスしてきたクライアントが送ってくるリクエストヘッダの事だったんですね。
クライアントとして、プロキシを通って受け取ったレスポンスヘッダの事だと思い込んでしまいました。
すみません。
HTTPって事は、apache 等のサーバーがクライアントのリクエストヘッダを処理しちゃうでしょうから、環境変数で渡してくれなかったら難しそうですね。
サーバーの設定とかで制御できるんでしょうかね、
その辺は全く分かりませんので
詳しい方の回答をお待ちになった方が良いかもですね。
サーバーを書いて別なポートで待ってればいいのかな…
とか一瞬思いかけて、自分には到底無理だと即効却下しました。
とにかく#1は無視してください、すみませんでした。
更なる回答、ありがとうございます。
#1の回答から「LWP::UserAgent」も含めて調査した結果、
サーバの設定ということが判明いたしました。
回答をくださいまして、誠にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Wallpaper Engineでおすすめの...
-
Perlのエラーについてご教授く...
-
bashスクリプト
-
perlで2次元配列をサブルーチ...
-
Strawberry Perl for Windows ...
-
ターミナルで特定の文字と文字...
-
INDIRECT 横に再度抽出したい
-
Perl 数値にスラッシュを入れる...
-
Perlの全角スペース 文字化け?
-
perl の open について教えてく...
-
Perl言語について。
-
ファイルをディレクトリ分配の...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
Perlで時間の計算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数ヘッダ?
-
リストコントロールの列幅を固...
-
VBAでExcelのヘッダーに文字列+...
-
ヘッダのinclude順
-
メールをPDF化する際に、ヘッダ...
-
HTTPリクエストがネットワーク...
-
perlでHTTP Request Headersの...
-
SpreadDesignerの列ヘッダ
-
AccessVBAで「このフィールドに...
-
[C#]ListView一覧表示時の幅設...
-
TCPヘッダのチェックサム算出方法
-
LinuxでRTPヘッダを作りたいの...
-
C# クッキーを使ってウェブブ...
-
ログイン後・・・
-
バイナリファイルのアップロー...
-
IPアドレスの確認方法
-
HTTPヘッダの大きさ
-
PerlでのHTTPヘッダのStatus変更
-
ftpでのネットワークバイトオー...
-
perl5について
おすすめ情報