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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# condaコマンドに対応したプロキシ設定が思うようにならないようです。 2 2022/04/11 17:15
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- PHP 掲示板のセキュリティについてアドバイスお願い致します 1 2023/08/11 20:44
- サーバー 別サーバに構築したApache+Tomcatの連携について 2 2023/03/06 23:23
- HTML・CSS 別サイトのHTML内にある情報を自動取得して、自分のサイトに組込む方法を教えてください。 例えば、Y 1 2023/06/15 08:09
- JavaScript JSON について 1 2022/06/09 18:17
- CGI サイト訪問者の情報を取得したい 1 2023/02/21 11:03
- オープンソース gmailでのimap設定 1 2022/09/15 13:25
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- 就職 先のことが不安すぎる(主に就職活動) 3 2023/06/27 09:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
[C#]ListView一覧表示時の幅設...
-
AccessVBAで「このフィールドに...
-
リストコントロールの列幅を固...
-
TeXのヘッダとフッタについて
-
SSLで送られたhttpのヘッダ...
-
レスポンスヘッダとエンティテ...
-
ルータでのMTU、MSS設定値の検...
-
VBAでExcelのヘッダーに文字列+...
-
VB2005 DataGridView CurrentC...
-
HTTPヘッダの大きさ
-
DBを10件毎に表示ページング...
-
6月の第2 第4火曜日は何日...
-
月の第一週とは
-
よくある 『 第○(1・2・3・4・...
-
週2回のペースって だいたい何...
-
毎○曜日って、使いますか?
-
Perl の外部モジュールの利用方法
-
エクセルで相対パスの書き方を...
-
[Excel] ある日の曜日が当月の"...
-
perlのcgiで、変数の中身を表示...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでExcelのヘッダーに文字列+...
-
[C#]ListView一覧表示時の幅設...
-
perlでHTTP Request Headersの...
-
AccessVBAで「このフィールドに...
-
ヘッダのinclude順
-
TCPヘッダのチェックサム算出方法
-
関数ヘッダ?
-
Content-type: text/htmlが表示...
-
レスポンスヘッダの出力方法
-
file_get_contents でリダイレ...
-
LinuxでRTPヘッダを作りたいの...
-
リストコントロールの列幅を固...
-
EXCEL:ヘッダー日付を年号で?...
-
SpreadDesignerの列ヘッダ
-
LWPでHTTPSサイトからコンテン...
-
HTTP 200 OKの後のリダイレクト?
-
C# クッキーを使ってウェブブ...
-
ftpでのネットワークバイトオー...
-
HTTPヘッダの取得方法
-
自作ヘッダファイルについて (C...
おすすめ情報