• 締切済み

PerlでHTTPを扱いたい

たとえば あるファイルhttp://xxx.xxx.xxx/xxx/xxxx.xxxを Perlで*.cgiのあるフォルダにそのファイルを ./yyyymmdd_hhmmss_xxx.xxx.xxx_xxx_xxxx.xxxとして 保存したいのですが 検索してもヘッダがついていたり、そのままな感じだったりして思うようなものは見つからず Perlではファイル入出力を少しと$ENV{'~'}とか時刻とかしかつかったことがないので ほとんどわかりません。 環境は 自宅では Windows95でAnHTTPD サーバーは@PAGESのものです よろしくお願いします

みんなの回答

回答No.3

同じサーバー内で、ファイルの絶対パスをユーザーが指定するという前提で説明します。 複数の関数を使って可能です。 #!/usr/local/bin/perl #ドメインの取得(http://xxx.xxx.xxx/) $domain=$ENV{'HTTP_HOST'}; #ファイルアドレスを指定(ドメインの下xxx/xxxx.xxx) $file='xxx/xxxx.xxx'; #ファイルアドレスを$file2に残す。 $file2=$file; #/を_に変更 $file=~s/\//_/g; #日付を指定した形にする $zisa =0; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time + $zisa * 60 * 60); $mon = ('1','2','3','4','5','6','7','8','9','10','11','12')[$mon]; $timestring = sprintf("%d%02d%02d_%02d%02d%02d_",1900+$year,$mon,$mday,$hour,$min,$sec); #くっつける $file=$timestring.$domain.$file; print "Content-type: text/html\n\nhhhhhhhhhhhhhhh$file2/$file"; #さいごにファイル名を変更する use File::Copy 'copy'; copy ($file2,$file ); exit;

ft1711
質問者

補足

ありがとうございます。 実際は他サーバーのcgiの出力するバイナリとテキストも必要なんです。 むしろ、そっちのほうが主といってもいいくらいなんです。 説明不足ですみません。

すると、全ての回答が全文表示されます。
回答No.2

http://perl.wonder-boys.net/?p=222 前の返事の方法で行なうなら自分でヘッダ内容を解読しながら行なえば良いかと。 要するに上のモジュール使う方法の中身を自分で書く感じ。 その場合は、httpのプロトコルを参考にすれば良いでしょう。 http://www.studyinghttp.net/cgi-bin/rfc.cgi?2616 上記ページ6章のレスポンス辺りで決められている値がヘッダの内容として送られてきているはずなので。 ソフトのバージョンは意識しないと欲しい情報が見つかりませんよ。 新しいバージョンに加わった機能をあるものと思って実装してできないと悩む事にもなりかねませんし。 質問にはperlなどと書かずにperl5.8.8とか書いた方が適合したお返事をもらえ易いですよ。 助言を読んで自身で置き換えれば良い話なのですけどね。

ft1711
質問者

お礼

遅くなってしまい、すみません ご回答ありがとうございます。 一応なんとかなりました。 ありがとうございました。

すると、全ての回答が全文表示されます。
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

「ヘッダがついている」だけならヘッダを自分で取り除けばいいのでは? あるいは, 「そのままな感じ」ならそのままでいいと思う.

ft1711
質問者

補足

ご回答ありがとうございます 説明不足ですみません そのままな感じというのは何らかのライブラリを使う方法で、 そのまま出力するという意味のつもりでした。 ヘッダを取り除く方法は #HTTP応答を受信 while(chomp($buf=<SOCKET>)){ print "$buf\n"; } という部分があります xmlとかだけではなくバイナリの方も扱いたいと考えているのですが それでもヘッダを取り除くことができるのであれば教えていただけるとありがたいです

すると、全ての回答が全文表示されます。

関連するQ&A