• 締切済み

HTTPヘッダの取得方法

PerlにてHTTPヘッダの情報を取得したいと考えています。 通常ならば、 $ENV{'<ヘッダ名称>'} で取得できるはずなのですが、 今回取得しようとしているヘッダはHTTPの標準ヘッダではありません。 proxyサーバにてログインを行い認証されますと、 そのproxyサーバが独自にHTTPヘッダに値を追加する仕様になっています。 テストではJavaですとproxyが設定したヘッダ情報を取得できるのですが、 ことPerlになると取得することができません。 ※Javaと今回動かすPerlは同一サーバで動かします。 HTTP標準以外のヘッダ情報はどのように取得すれば良いのでしょうか? なお、PerlのVerは5.6.1、OSはLinuxです。

  • Perl
  • 回答数2
  • ありがとう数2

みんなの回答

  • g_p_
  • ベストアンサー率53% (28/52)
回答No.2

こんにちは、 プロキシを通ってアクセスしてきたクライアントが送ってくるリクエストヘッダの事だったんですね。 クライアントとして、プロキシを通って受け取ったレスポンスヘッダの事だと思い込んでしまいました。 すみません。 HTTPって事は、apache 等のサーバーがクライアントのリクエストヘッダを処理しちゃうでしょうから、環境変数で渡してくれなかったら難しそうですね。 サーバーの設定とかで制御できるんでしょうかね、 その辺は全く分かりませんので 詳しい方の回答をお待ちになった方が良いかもですね。 サーバーを書いて別なポートで待ってればいいのかな… とか一瞬思いかけて、自分には到底無理だと即効却下しました。 とにかく#1は無視してください、すみませんでした。

susumufire
質問者

お礼

更なる回答、ありがとうございます。 #1の回答から「LWP::UserAgent」も含めて調査した結果、 サーバの設定ということが判明いたしました。 回答をくださいまして、誠にありがとうございました。

  • g_p_
  • ベストアンサー率53% (28/52)
回答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 をざっと見た感じでは、ヘッダ情報をうまい事やってくれるメソッドがあるのか無いのか分かりませんでした。) はずしてたらすみません。

susumufire
質問者

お礼

ご回答ありがとうございます。 説明不足で申し訳ございません。 >テストではJavaですと・・・ と書いた部分は、「JavaServletでは」ということです。 即ち、自分自身にアクセスしてきた時の情報を取得したいわけです。 g_p_様が回答していただきましたものになりますと、 他サーバへのアクセスになってしまいますが、 「LWP::UserAgent」というものを知りませんでしたので、 手がかりにしたいと思います。 ありがとうございました。

関連するQ&A

  • perlでHTTP Request Headersの情報を取得、表示す

    perlでHTTP Request Headersの情報を取得、表示するページを作成したい 当方初心者です。 apache上のCGI(perl)で、ブラウザから受け取った HTTP Request Headersの情報を取得、出力するページを作成したいのです。 調べると下記のようなサーバ環境変数の取得、表示方法は多数ヒットするのですが =================================================== #!/usr/bin/perl -- print << "DOC1"; Content-type:text/html\n\n <HTML><BODY> DOC1 print $ENV{'HTTP_USER_AGENT'}<br>\n"; print $ENV{'REMOTE_ADDR'}"; print << "DOC2"; </BODY></HTML> DOC2 =================================================== 今回は、環境変数からではなく、HTTP Request Headersから 直接ヘッダに格納された情報を取得したいのです 取得・表示したい情報は標準HTTPヘッダ情報に加え、 途中で経由するプロキシが追加するヘッダ情報です。 完成イメージとしては PHPの<? phpinfo() ?>で出力できる 添付画像にあるような形なのですが どのようにすればできるのでしょうか サンプルの形で教えて頂けると助かります 参考になるページでも結構です よろしくお願いします

  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • HTTP リクエストヘッダの取得方法について

    表記の内容についてご存知の方がいらっしゃい ましたら、ご教授いただけませんでしょうか。 HTTPのリクエストヘッダに付与されている 環境変数「HTTP_IV_USER」 もしくは 「IV_USER」を 取得する方法について教えて頂けませんでしょうか。  [実行環境]  OS:Windows2000 Server  Webサーバ:Oracle Application Server 9.0.2 その他にOracleのCDに入っているP/L SQLの WebToolkitがインストールされてます。 当方としては取得したリクエストヘッダの 値をP/L SQLのプログラムを通してOracleの データベースに書込みたいと思っております。 何卒どうぞよろしくお願い致します。

  • 自ファイルのHTTPヘッダーの取得

    他のURLであれば、get_headers関数を利用して、「HTTP/1.1 200 OK」等のヘッダー情報が取得できますが、自ファイルのヘッダー情報はどのように取得するのでしょうか。 よろしくお願いします。

    • 締切済み
    • PHP
  • $ENV{'HTTP_COOKIE'}について

    windowsサーバーのcgi(※)にて「$ENV{'HTTP_COOKIE'}」でcookieの値が正常に取得できてましたが、 linuxサーバーにそのソースをそのまま移行し、動作確認したところ「$ENV{'HTTP_COOKIE'}」でcookieの値が取得できなくなってしましました。 (※)・・・ショッピングカートの処理 ちなみにSSLを使用しているページです。 (1)画面A(http)から「カート入れる」ボタンをクリックし、画面B(https)に遷移 (2)画面Bに遷移した際にcookieに取得、保存 要するにhttpsでセットしたものをhttpsゲットしようとしています。 サーバーの環境は以下となります ■windowsサーバー ・OS : Windows 2003 R2 SP2 ・Perl ver : 5.8.7 ■linuxサーバー ・OS : Red Hat Enterprise Linux 4 ・Perl ver : 5.8.8 ・パーミッション : 757 ロジックは変更していないのでおそらくサーバーのどこかの設定を変更しなければならないのではないかと思われますが、どこに手を付けてよいのかがわかりませんので ご教授していただきたいです。 宜しくお願い致します。

    • ベストアンサー
    • Perl
  • プロキシを経由して他サイトのデータを取得する

    プロキシを経由して他サイトのHTMLファイルを取得しようとしているのですがうまくいきません。 私がためしたのはLWP::UserAgentを用いた方法で my $uap = LWP::UserAgent->new; $ENV{HTTP_PROXY} = 'http://proxy:8080'; $ENV{FTP_PROXY} = 'http://proxy:8080/'; $ENV{HTTP_PROXY_USERNAME} = 'name'; $ENV{HTTP_PROXY_PASSWORD} = 'pass'; $uap->env_proxy(); という感じです。 プロキシ内のページからは普通にHTMLファイルが取得できますがプロキシ外はまったく取得できません。 良い方法があったら教えて下さい。お願いします。

    • ベストアンサー
    • Perl
  • HTTPのリクエストヘッダを独自に生成する方法を教えてください。

    どうしても実現方法がわからずに困っています。 ぜひお力添えをお願いいたします。 HTTPのリクエストヘッダに User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) のような形で情報が入っていると思います。 これと同じように、独自で作った以下のようなものを入れたいのですが、何をどうすればよいのでしょうか。 uid: 1234 実行環境は、 OS:Windows2003サーバ Webサーバ:IIS その他にActivePerlがインストールされていますので、Perlを使うことが可能です。 不可能であるということがわかるだけでもありがたいです。 お知恵を拝借させてください。

  • PerlでIf-Modified-Since取得

    Perlで書いているCGIで、 HTTP リクエストヘッダのIf-Modified-Sinceを取得したいのですが、 %ENVには入ってこないようです。 取得する方法があれば、教えて下さい。 ・.htaccess にSetEnvなどで記述することでできそうですが、方法が分かりません。 ・HTTP Request Header 全体を取得する方法でも結構です。 よろしくお願い致します。 環境は、さくらインターネットのレンタルサーバーのApacheです。

    • ベストアンサー
    • Perl
  • HTTP通信の詳細を知りたい

    PHPで他ドメインのページの情報を取得しています。 その際に、HTTP通信のリクエストヘッダ、レスポンスヘッダの詳細を見たいです。 イメージとしては、firefoxの「firebug」とか「live http header」で取得できる情報量がほしいです。 現在、http通信でhttp_clientを使っています。 http_clientのcurrentResponse()でレスポンスは取得できるのですが、 クッキー情報などが入っていないです。 一番知りたいのは、リクエストヘッダです。 PHPを設置しているサーバーからどのようなリクエストヘッダを送っているのかを知りたいです。 というのは、設置しているサーバーによって同じページにリクエストを送っているのに、返ってくる情報が変わるときがあります。 PHPプログラムは全く同じです。 サーバーはさくらインターネットの共有サーバーを3つ契約しており、 3つのサーバーに同じプログラムを置いてHTTP通信しているのですが、 取得できる情報が異なっていて困っています。 恐らく、リクエストの何かが違っていると思うのでそれを調べたいと思って 質問しました。 そもそも原因が違うところにありそうであればアドバイスもお願いします。 よろしくお願いします。

    • 締切済み
    • PHP
  • HTTP ヘッダーの編集について

    HTTPヘッダのことで質問です。 リプライヘッダの情報「X-AspNet-Version:2.0.50727」と表示されていますが 上記リプライヘッダは編集、または削除は可能でしょうか? 開発環境が表示されるのをふせぎたいのですが。 また、可能でしたらその方法を教えてください。 環境:windows 2003 server IIS 6.0 ASP.net 2.0

専門家に質問してみよう