• ベストアンサー

「perl-cgiで質問です」URL打ち込みをPOSTで送信したい?

自作したtest.cgiに、 http://localhost/test.cgi?1,2,3,4,5 このように書くと、 1 2 3 4 5 と表示されるperlプログラム ==== $qs = $ENV{'QUERY_STRING'}; @array= split(/,/,$qs); foreach(@array){ print ; print "\n"; } ==== を作ったのですが、この数字の部分を長くするとうまくいきません。 もしかすると、GET?で送信されているため、長すぎると正常に受信できないのかもしれません。 詳しくは分かりません。 しかし、何とか、URLに直接書き込んだ状態で正常に表示させたいのですが何とかする方法は無いでしょうか? 宜しくお願い致します。

  • Perl
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
回答No.1

残念ながら、アドレス欄記載のURLは、GETメソッドで、かつ、おおまか512バイトが限度です。 で、POSTに置換するのも、不可能と思ってください。 #必ず、<form~ <input ~ <input type="submit" が必要になる。 ただし、<a href="abc?1,2,3,4,5"> のように見せかけるには、JavaScriptで工夫が可能かもしれません。

mai_540903
質問者

お礼

ご回答いただ本当にありがとうございました。 とても、参考になりました

その他の回答 (1)

回答No.2

答えでは有りませんが GETの文字数制限について昔、調べた限りでは、、、 (UA:win98+IE4 とNN4.05 httpdはFreeBSD2.2.6+Apache1.2.5) IE4がクライアント側の制限で2048バイト NNだとクライアント側の制限よりもApacheの制限で8160バイト でした。NNと言うのはNetscapeの事です。 たぶん今でも同じ様なものではないかと思います これは送る文字列の長さだけではなくURL全体の文字数で、 formで送る場合は URLエンコードされますので 通常は日本語1文字で%82%A0のように6バイトになります

mai_540903
質問者

お礼

ご回答いただ本当にありがとうございました。 とても、参考になりました

関連するQ&A

  • CGI間のデータ送信について(perl)

    perlのcgiで詰まってしまったので質問します。 現在困っていることは、cgiからcgiへの変数の値の受け渡しについてです。 色々調べてやってみたのですが、うまくいきません。 送信側で print "<form action = \"sendmail.cgi\" method=\"post\">"; print "<A href =\"sendmail.cgi?$array1[0]&$array1[1]&$array1[2]&$array1[3]\">sendmail.cgi</A>"; print "<input type=\"submit\" value=\" ボタンです。 \">"; print "</form>"; として 受信側で # postでもgetでも受信できるようにする if ($ENV{'REQUEST_METHOD'} eq "GET") { $data = '1'; $testmsg = "GETで受信"; $formdata = $ENV{'QUERY_STRING'}; print("$formdata<BR>"); } elsif ($ENV{'REQUEST_METHOD'} eq "POST"){ # こちらを使用している $data = '2'; $testmsg = "POSTで受信"; $length = $ENV{'CONTENT_LENGTH'}; read(STDIN,$formdata,$ENV{'CONTENT_LENGTH'});# $dataに受信する print("$formdata<BR>"); } else { $data = '3'; $testmsg = "受信することができませんでした。<BR>"; } としてpostにて受信しようとしています。 postのif文には入ったようなのですが、データが空っぽで何も入っていないようなのです。 何が原因なのでしょうか?助けてほしいです。

    • 締切済み
    • CGI
  • perlでpostが受け取れない

    perlでCGI を作ってみましたが、POSTでデータが受け取れません。GETは問題ないのですが。read stdin が NULL になります。 ローカルのapache2でテストしています。$ENV{'CONTENT_LENGTH'}がゼロのためだと 思いますが対応が分かりません。 OS:CENTOS6 (VirtualBox) APACHE2.2 Perl 5.10 /var/www/cgi-bin で実行。 呼び出しは <form action='localhost/cgi-bin/uptag.cgi' method='post'"> です。

    • 締切済み
    • CGI
  • perl-cgiのサイズと実行速度について

    perl-cgiのサイズと実行速度について 下記のように、$ENV{'QUERY_STRING'}の値によって、使う、サブルーチンを振り分けているCGIが2つあります。 sub app*は非常に似たような内容で、ひとつの大きさが200KB程度あります。 sample1.cgi と sample2.cgi ではサーバのCPU時間にどの程度の影響がありますか? CGIの内部でベンチマークを取得してみたところ、sample2.cgiでは、0.02cpu程度上昇した程度で、大きな差は見られませんでした。 しかし、共有の、レンタルサーバで使う予定ですが、その場合、毎回、200KBのCGIをコンパイルして実行と、毎回、400KBのCGIをコンパイルして実行されるため、ベンチマークでは計りきれないところが心配です。 また、CPU時間に差が出たとしても、それは、無視できる程度の物でしょうか? まったく持って、見当が付きませんので、どなたか、ご存知の方、教えていただけると幸いです。 宜しくお願い致します。 =sample1.cgi============== $qs = $ENV{'QUERY_STRING'}; if($qs eq 1){ &app1(); }else{ &app2(); } sub app1(){ #いろいろ } sub app2(){ #いろいろ } =sample2.cgi============== $qs = $ENV{'QUERY_STRING'}; if($qs eq 1){ &app1(); }elsif($qs eq 2){ &app2(); }elsif($qs eq 3){ &app3(); }else{ &app4(); } sub app1(){ #いろいろ } sub app2(){ #いろいろ } sub app3(){ #いろいろ } sub app4(){ #いろいろ }

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • CGI:method="post"でもGETになる

    CGIで標準入力によりフォームデータを取得できないため、環境変数%ENV内の値を 調べましたところ、入力フォーム(html)のformタグでmethod="POST"と明示しているにも 拘らず、REQUEST_METHODの値がGETになっており、POST用のCONTENT_LENGTHも GET用のQUERY_STRINGも共に空になっております。 htmlでmethod="GET"と指定した場合には、REQUEST_METHODの値は正しくGETになり QUERY_STRINGからフォームデータを取得できます。 同じCGIをPC上のApache2.4でテストした結果、REQUEST_METHODはhtmlのmethod=~で 指定した通り正しくPOSTまたはGETとなり、それぞれフォームデータを 取得できることを確認いたしております。 この点についてプロバイダに問合せいたしましたが、サポート対象外ということで、 回答を得ることができませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただけないでしょうか、お伺いいたします。 (1)ホスト動作環境 a.CGIサーバ:Apache b. perl 5.10系 (2)PC動作環境 a.OS: Windows 7 b.ブラウザ: Internet Eexplorer 11 c.CGIサーバ: Apache 2.4 d. Activeperl 5.20

    • 締切済み
    • CGI
  • apache1.3とperlでCGI

    超初心者です。 windows XPでapache1.3 と active perl 5.1.2をインストールして、 CGIを動作させたいと考えています。 http://localhostを入力してapacheの起動画面は表示されていること を確認しました。 その後httpdconfに下記を追加しました。 AddHandler cgi-script .cgi .pl AddType application/x-httpd-cgi .cgi AddType application/x-httpd-cgi .pl <Directory "C:/Program Files/Apache Group/Apache/cgi-bin"> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> C:\Program Files\Apache Group\Apache\cgi-binに既存で存在する printenv.plを実行しようとするとファイルのダウンロードの画面が出てきて 実行されません。printenv.plは下記のようにperl.exeへのパスだけ変更しました。 #! C:/Perl/bin/perl ## ## printenv -- demo CGI program which just prints its environment ## print "Content-type: text/plain\n\n"; foreach $var (sort(keys(%ENV))) { $val = $ENV{$var}; $val =~ s|\n|\\n|g; $val =~ s|"|\\"|g; print "${var}=\"${val}\"\n"; } どうすればCGIが実行できるようになるのでしょうか? ご教授ください。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • Perlの文字コード変換についての質問です。

    Perlの文字コード変換についての質問です。 ホームページ全体は、UTF-8で作成されています。 そのため、$qsは、どうも、S-JISのようなので、UTF-8に変換して URLデコードさせたいのですがうまくいきません。 文字化けしないで、UTF-8で作成されたページに表示させたいのですがどうすればよいでしょうか? 宜しくお願い致します。 ------------------------------------ $qs = $ENV{'QUERY_STRING'}; use Encode::Guess qw/ shiftjis /; use Encode qw/ decode /; $enc = guess_encoding ( $qs ); if ( ref $enc ) { $utf8 = decode ( $enc->name , $qs ); } $qs =~ tr/+/ /; $qs =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print "$qs";

    • ベストアンサー
    • Perl
  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • perl-cgi 文章のマッチングについて

    辞書テキストで作ってそれを、任意の文章にマッチングさせ、変換したいのですが、どのようにすると、(プロバイダの)サーバに負担の少ないCGIになりますか? やりたいことは、 文章>>eigo(lemonとスシ) を入力すると、 文章>>エイゴ(レモンとスシ) と返されるCGIです。 今考えているのは、下記ですが、perl-cgiを初めて間もないため、色々なHPを参考にして、なんとか、変換まではできたのですが、、サーバに過大な負担をかけているかが心配です。そこで、効率的なものに書き換えていただけますととても助かります。 宜しくお願い致します。 ----etoj.cgi---- #!/usr/bin/perl print "Content-type: text/html;charset=utf-8\n\n"; $str = '文章>>eigo(lemonとスシ)'; open in,"dic.txt"; @array = <in>; close in; $n = 0; foreach(@array){ $_ =~ s/\n//g; $_ =~ s/\r//g; @temp = split(/\t/,$_); $eng[$n] = $temp[0]; $jpn[$n] = $temp[1]; undef @temp; $n++; } print $str; $i=0; foreach(@eng){ $str =~ s/$_/$jpn[$i]/g; $i++; } print "<HR>"; print $str; exit; ---------------- --dic.txt-- lemon¥tレモン eigo¥tエイゴ susi¥tスシ 以下、500KB程度続きます。 -----------

    • ベストアンサー
    • Perl
  • CGI(Perl)を作ったがうまく実行されない

    度々すみません。 ~~~~HTML~~~~ <FORM action="test.cgi" method="POST" NAME="FORM"> <div>最大攻撃力:<INPUT type="text" NAME="att"><br></div> <div>防御力:<INPUT type="text" NAME="def"><br></div> <div>クリティ時与ダメ:<INPUT type="text" NAME="cyo"><br></div> <div>クリティ時被ダメ:<INPUT type="text" NAME="chi"><br></div> <div>EXD時与ダメ:<INPUT type="text" NAME="eyo"><br></div> <div>EXD時被ダメ:<INPUT type="text" NAME="ehi"><br></div> <INPUT type=submit value="実行"> <INPUT type=reset value="リセット"></TD> </FORM> ~~~~CGI~~~~ #! c:/perl/bin/perl if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; } foreach $pair(split(/&/,$query)) { ($l_set,$value) = split(/=/,$pair); $form{$l_set}=$value; } $att=$form{'$att'}; $def=$form{'$def'}; $cyo=$form{'$cyo'}; $chi=$form{'$chi'}; $eyo=$form{'$eyo'}; $ehi=$form{'$ehi'}; $hi=int((($chi*2+$def)+(($ehi*2+$def)/1.2))/2); $yo=int(((($att-$cyo*2)*2)+(($att*1.2-$eyo*2)*2))/2); print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN"> <html> <head><title>被ダメテスト</title></head> <body><p>相手攻撃力は約<b>$hi</b>です。</p> <p>相手防御力は約<b>$yo</b>です。</p></body> </html> END このまま数値を入力して実行しても、「0」と出てきてしまいます。 読み込み(代入?)が出来ていないのでしょうか? 間違えている部分があればご指摘ください。 ※コンパイラはApacheです。

    • ベストアンサー
    • Perl