人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

http://localhost/sample.cgi?key=http://test.com/test.html

上記のようなHTTPリスエストを発行したときに、keyパラメータに指定されているURLの内容(例ではtest.html)をそのまま返すCGIのサンプルを教えていただけますか。リダイレクトはしないでください。Perl or Python or Rubyで実装したサンプルを教えてください。

URLを記載していただくか、サンプルを貼り付けていただくか、どちらでも構いません。取得対象のURLをどうCGIに渡すかもお任せします。

宜しくお願い致します。

●質問者: er7
●カテゴリ:インターネット ウェブ制作
✍キーワード:CGI HTML HTTP Key Perl
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● いわどん
●150ポイント ベストアンサー

Ruby 1.8.4とwebrick/cgi、open-uriで書きました。クエリなしだとURIを入力する為のフォームが出ます。フォームにURLを書いてGetボタンを押すと、そのURLのHTMLを取得して表示します。URLはwebrick/cgiのマニュアルです。

#!/usr/local/bin/ruby

require 'open-uri'
require 'webrick/cgi'

class MyCGI < WEBrick::CGI
 def do_GET(req, res)
 if req.query.include?('key')
 uri = URI.parse(req.query['key'])
 uri.open do |f|
 res['content-type'] = f.content_type
 res.body = f.read
 end
 else
 res['content-type'] = 'text/html; charset=utf-8'
 res.body = <<EOH
<html>
<body>
<form method="get" action="#{req.script_name}">
URL: <input name="key" value=""> <input type="submit" value="Get">
</form>
</body>
</html>
EOH
 end
 end
end

MyCGI.new.start

手元のローカル環境で動作確認しましたが、もし問題があれば適当に直してください。

◎質問者からの返答

ありがとうございます。key=[URL]で指定されるURLにGetパラメータが含まれていた場合には、[URL]が分解されるので正しくリクエストできませんね。[URL]を丸ごと取得する方法をご存知であれば教えていただけますか。ポイントを差し上げます。


#追記(2006/10/09)

回答者制限が1件になっていたのに追加回答を工夫してくださってありがとうございます。日記で説明してくださっていたように、エンコードの問題でした。少し考えれば分かることだったのに申し訳ありません。今回の回答もポイントに上乗せさせていただきます。ありがとうございました。


2 ● mugenkoubou
●30ポイント

perlならLWP::Simpleモジュールを使用して、

#/usr/bin/perl

use LWP::Simple

print "Content-type: text/html\n\n";

getprint(substr($ENV{'QUERY_STRING'}, 4));

こんな感じでURLの内容の取得ができると思います。

画像やCSSなどへのリンクが相対パスで書かれていると、

画像などは取得できませんが。。。


URLは適当です。

http://www.yahoo.co.jp/

◎質問者からの返答

ありがとうございます。現在、1番目の回答のサンプルを試しています。思っていることができないのであれば、このサンプルを使わせていただきます。


3 ● backupper
●30ポイント

以下でどうでしょうか?Rubyです。

#!/usr/bin/env ruby

require 'cgi'
require 'open-uri'

cgi = CGI.new
print cgi.header
open(cgi['key']) do |f|
 f.each_line do |line|
 print line
end
end

http://www.ruby-lang.org/ja/

http://www.ruby-lang.org/ja/man/?cmd=view;name=open-uri

◎質問者からの返答

ありがとうございます。上記回答への返信と同じになりますが、現在、1番目の回答のサンプルを試しています。思っていることができないのであれば、このサンプルを使わせていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ