• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PerlでHTTP~取得できないページがあるのですが。)

PerlでHTTP取得できないページがあるのですが

このQ&Aのポイント
  • 任意のページを取得するために、ASHさんのスクリプトを使用しています。
  • しかし、一部のページを取得できません。ブラウザでは見れるのに、このスクリプトでは取得できません。ダンプをとってみると、404not foundが返却されます。
  • この場合のアドレスは「別名」なのでしょうか?その理由と対処方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

> #$http = '1.1'; のシャープを外してないとか。 私が的外れかも。

noname#181870
質問者

お礼

ありがとうございました。 >私が的外れかも。 どころか、 これをはずしたら、ドンピシャ! うまくいきました。 コード的に見ると、このサーバーはHTTP1.1しか サポートしていないということですね。 1.1の判断ではじかれてelse{}を実行したけれど、 「なにそれ?」と、知らん顔されたということでしょう。 とすると、この判断の前にサーバーに、「あんたのVerは?」 って聴いて分岐させるべきだとおもうのですが、 その方法はあるのでしょうか?

その他の回答 (2)

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

>この判断の前にサーバーに、「あんたのVerは?」 >って聴いて分岐させるべきだとおもうのですが、 >その方法はあるのでしょうか? Webサーバに適当なHTTP要求を送信すれば,それに対するWebサーバからのHTTP応答の中にHTTPバージョンを示す値が含まれていますので,それを検査することになります。CGIプログラミングの入門書に解説が載っているでしょう。 ただ,今回のご質問の場合は。 HTTP/1.0のWebサーバ,HTTP/1.1のWebサーバ,ともにそのWebページを取得できればいいという最も基本的なニーズですから,単にHTTP/1.1要求を送信すればよいはずです。 RFC2145「HTTPのバージョン番号の使い方と解釈について」を参照。 http://www.tech-web.net/note/RFC2145.html#version

noname#181870
質問者

お礼

ありがとうございます。 >Webサーバに適当なHTTP要求を送信すれば,それに対するWebサーバか >らのHTTP応答の中にHTTPバージョンを示す値が含まれていますので ダンプを取ってみましたので、404not foundを返したときでも、 ヘッダにそれが含まれているのは知っています。それを抜き出すのは 簡単なのですが、もっとスマートに取得できないかと、思った訳です。 >CGIプログラミングの入門書に解説が載っているでしょう。 私自身、Perlの入門書でHTTPプロトコルについて、Perlとの関連で 書かれたものは知りません。 CGIプログラミングは、特定の言語を指すものではないので、 他の言語の入門書には書いて有るのかも知れませんね。 プロトコルについてはあまりヨク知らないので、Perlに関連した入門書 で、HTTPに関して書かれた書籍があれば、ご紹介願います。 >HTTP/1.0のWebサーバ,HTTP/1.1のWebサーバ,ともにそのWebページを>取得できればいいという最も基本的なニーズですから,単にHTTP/1.1 >要求を送信すればよいはずです。 おっしゃるとうりです。 オリジナルでは、その部分がコメントアウトされていて、上手く いかなかったことは、 osamuy(No.1)さんのご指摘の通りでした。 >RFC2145「HTTPのバージョン番号の使い方と解釈について」を参照。 >​http://www.tech-web.net/note/RFC2145.html#version ありがとうございました。 勉強になりました。

  • pick52
  • ベストアンサー率35% (166/466)
回答No.2

URL/URIの仕様上は半角チルダ(~)をURLエンコードなしに記述することができません。 また、Perlでは ~ を使用すると自動でU+FF5E(全角チルダ)に変換して しまうことがあるようです。 ~ を %7e にして試してみてください。

noname#181870
質問者

お礼

ありがとうございました。 参考になりました。~には注意します。