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


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

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

宜しくお願い致します。

回答の条件
  • URL必須
  • 1人1回まで
  • 登録:2006/10/03 13:38:23
  • 終了:2006/10/09 01:02:43

ベストアンサー

id:iwadon No.1

いわどん回答回数60ベストアンサー獲得回数132006/10/03 16:54:36

ポイント150pt

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

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

id:er7

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


#追記(2006/10/09)

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

2006/10/09 00:58:44

その他の回答(2件)

id:iwadon No.1

いわどん回答回数60ベストアンサー獲得回数132006/10/03 16:54:36ここでベストアンサー

ポイント150pt

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

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

id:er7

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


#追記(2006/10/09)

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

2006/10/09 00:58:44
id:mugenkoubou No.2

mugenkoubou回答回数10ベストアンサー獲得回数02006/10/03 16:55:42

ポイント30pt

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/

id:er7

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

2006/10/04 20:14:31
id:backupper No.3

backupper回答回数95ベストアンサー獲得回数102006/10/03 17:02:54

ポイント30pt

以下でどうでしょうか?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

id:er7

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

2006/10/04 20:15:13

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 単なる日記@はてな 2006-10-04 21:49:06
  • [?Q][Ruby]question:1159850302へのフォロー 単なる日記@はてな 2006-10-04 21:49:14
    ありがとうございます。key=[URL]で指定されるURLにGetパラメータが含まれていた場合には、[URL]が分解されるので正しくリクエストできませんね。[URL]を丸ごと取得する方法をご存知であれば
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません