• 締切済み

web文書を取得するプログラムのサイト内での不具合について

perl初心者です。 自分のwebサイトのコードを取得するプログラムをつくろう と思っているのですが、下のコード -------------------------------------------------------- #!/usr/local/bin/perl use LWP::UserAgent; use HTTP::Request; use HTTP::Response; our $URL = 'http://www.google.co.jp/'; # アクセスする URL my $proxy = new LWP::UserAgent; my $req = HTTP::Request->new('POST' => $URL); # HTTP リクエストを作成 my $res = $proxy->request($req); # $res に HTTP レスポンスが返ってくる print $res->content; # HTML を表示 1; --------------------------------------------------------------- でターゲットのurlが上のgoogleだと取得できるんですが 自サイトのurl'http://○○.××.△△.com/'だと 500 Internal Server Errorとなってしまいます。 因みにレンタルサーバーを利用しています。 サーバーでは技術的な質問は受け付けてないとの事なので、 スクリプトの質問とは少しズレますが分る方がいましたら ご教えていただきたく質問いたしました。

みんなの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.4

自分の web サイト内の CGI から自分の web サイトに接続しようとしているようにも思えるのですが? レンタルサーバということなのでうまくいくかわかりませんが、 http://○○.××.△△.com/ を http://localhost/ (又は http://127.0.0.1) に変えてみては?

Guree
質問者

お礼

kumozさん回答有難う御座います。 uwiさんの言ったhttpヘッダが抜けてましたw 上のコードでgoogleのページが取得できた為 かえって遠回りしてしまいました。 因みにkumozサンのアドバイスの方法で試みたところ ...........Your requested host is not found.の画面がでて 強制的にレンタルサーバのホームに切り替わる感じでした。 やはりレンタル故の現象なのですかね。

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.3

そのご自分のサイトをブラウザで見ると、きちんと表示されているんですよね? もし、きちんと表示されているのであれば、まずブラウザがどのようなやりとりをし ているのかを見てみればいいかと思います。 Firefoxに、”Live HTTP Headers”というアドオンを入れて、header情報でどういう やり取りがなされているのかを見てみてください。 ブラウザが行っているのと同じやり取りをすれば、ご自身のサイトのHTMLを取得でき るのではないかと思います。

Guree
質問者

お礼

ryu_chanさん回答有難う御座います uwiさんも言ってましたがheader情報抜けてましたw 最初の上のコードでgoogleページが取得できたのが 余計遠回りしてしまいました。

  • uwi
  • ベストアンサー率74% (55/74)
回答No.2

> 500 Internal Server Errorとなってしまいます。 というのは$resに 500 Internal Server Errorが返ってくるということですか? それともこのコードをサーバ上で動かすと 500 Internal Server Errorになるということですか? 後者の場合、コードにHTTPヘッダがないからでは? (コードを省略していないのであれば) print 'Content-type: text/html', "\n\n";

Guree
質問者

お礼

遅くなりました。 uwiさん回答有難う御座います。 ご指摘のとおり、httpヘッダを着けたしたところ、 The requested method POST is not allowed for the URL のエラーが出てしまったのですが、調べたところ私のレンタル サーバーはApache 1.3系なのでhtmlへのポストはエラーに なってしまう事が分りました。 なのでGETにしたところページを取得できました。 上のコードでgoogleのページの取得が出来たのが余計遠回り してしまったようです。 暇ができたらまたラクダ本でも読み返し知識をつけたいと思います。

回答No.1

UserAgent を指定してみたら my $proxy = new LWP::UserAgent; $proxy->agent('Mozilla/5.0'); ... あと、画面表示だけなら、POSTメソッドじゃなくてGETメソッドかも

Guree
質問者

補足

_--_1l1_1_さん回答有難うございます。 しかしながら、UserAgent を指定とGETメゾットに変更 しても500 Internal Server Error と表示されてしまいます。 googleだと取得できるのに何故なんでしょうかね。

関連するQ&A