- 締切済み
フォーム以外からCGIにPOSTする方法
CGIプログラム(便宜的にPROGRAM_A)にデータを渡す方法はGETとPOSTがあるかと思います。 そこで、フォーム以外(perlプログラム(便宜的にPROGRAM_B))から、POSTを使用してPROGRAM_Aにデータを渡すことは可能でしょうか。 教えてください。 PROGRAM_B ---(POST)---> PROGRAM_A
- nika982001
- お礼率0% (0/13)
- CGI
- 回答数2
- ありがとう数0
- みんなの回答 (2)
- 専門家の回答
みんなの回答
TCP/IPとかHTTPのプロトコル関係の書籍とか見るとたいがい書いてあったりするんですけどね。 自信なかったんで#1の回答には書きませんでしたが、下記のソースだと、$host、$path、$query に文字列をセットすると、最終的に @ret に値が返ってくるはずです。 ただしバグがあったらあしからず。 --------------------------------○ $host = 'www.provider.com'; $path = '/~account/index.htm'; $query = 'a=123&q=abc'; use Socket; $address = inet_aton($host) || die "ERROR"; $sockaddress = sockaddr_in(80, $address); socket( SOCK, PF_INET, SOCK_STREAM, getprotobyname('tcp')) || die "ERROR"; connect( SOCK, $sockaddress ) || die "ERROR"; binmode(SOCK); select(SOCK); $| = 1; select(STDOUT); print SOCK "POST $path HTTP/1.0\r\n"; print SOCK "Host: $host\r\n"; print SOCK "Connection: close\r\n"; print SOCK "Content-Length: " . length($query) . "\r\n"; print SOCK "\r\n"; print SOCK "$query"; @ret = <SOCK>; close(SOCK);
自分でソケットを開いてHTTPプロトコルで投げればいいのです。 すぐに必要ですか?
関連するQ&A
- 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
- CGIから別のCGIへPostするには?
こんにちは。 a.cgiにアクセスがあったらb.cgiに<data=hoge>というデータを postしたいのですが、どうすればいいのですか? よろしくお願いします。
- ベストアンサー
- CGI
- CGIでフォームデータを取得できません
CGI(perl)の標準入力についてお伺いいたします。 PC上でテストし動作を確認したCGIをプロバイダのCGIサーバに移植しましたが、 正常に実行終了するものの、標準入力によるフォームデータの取得ができません。 フォームデータを受け取る変数が空になってしまいます。 PCとプロバイダのCGIサーバとでは、CGIスクリプトの記述方法が異なるのでしょうか。 書籍、ネットをだいぶ調べましたが、解決策が見当たりませんでした。 このような現象の原因について、お心当たりのある方がおられましたら、 ご教示いただきたいです。 (1)PC動作環境 a.OS: Windows 7 b.ブラウザ : Interne Eexplorer 11 c.CGIサーバ: Apache 2.4 d.perl : Activeperl 5.20 (2)CGIスクリプト(標準入力の部分) 尚、フォームでは、method="POST"を指定しております。 # フォームデータの取得 if($ENV{'REQUEST_METHOD'} eq 'POST') { read(STDIN, $query, $ENV{'CONTENT_LENGTH'}); } else { $query = $ENV{'QUERY_STRING'}; }
- 締切済み
- CGI
- CGI/Perlでメールフォームを作るには。
CGI/Perlでメールフォームを作るにはHPのトップページ(ソースコード)にCGI/Perlのプログラムを入力すればメールフォームは使用できるようになるのでしょうか? よろしくお願いします。
- 締切済み
- CGI
- cgiからcgiを呼び出す方法
perlのcgi製作を始めて7日目の素人で恐縮ですが、教えてください。 タイトルのキーワードで検索し、いろいろ試しておりますがうまく動作しません。 ■試した例 exec("./cgi A.cgi") <!--#exec cgi="./cgi A.cgi"--> もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。 cgi A:アンケート回答フォームのようなもの cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 自分のPCにApacheをインストールし、ローカルで実行しております。 cgi Bはcgi Aを呼び出す部分をコメントアウトすれば動作します。 どなたか良きアドバイスをよろしくお願いします。
- ベストアンサー
- CGI
- フォームから2つのCGIへ送信する場合
申込フォームに記入してもらい、それをCGIフォームに送る場合に、2つの別々のCGIフォームに送ることはできるのですか。 例えば以下のように書けますか <form name="kuser" action="A.cgi" & B.cgi" method="post">
- ベストアンサー
- CGI
- POSTでデータを送信する方法。
他のサーバーのCGIに対してPOSTでデータを送信する方法を探しています。 Perlバージョンは5.8 使用可能モジュールはPerl5.8 標準モジュール もしくはPurePerlモジュール この環境でPOSTを扱う方法をご存知でしたら、教えていただきたく思います。
- 締切済み
- Perl
- htmlのフォームからcgiにデータを渡す方法
下記[例1]のhtmlで作成したフォームから下記[例2]のcgiへデータを渡したいのですが、 どのようにしたら良いのでしょうか? 初心者なので全くわかりません。 お手数とは存じますが、ご享受お願い致しますm(__)m [例1] <form method="post" action="xxx.cgi"> <input type="text" name="a" value="" size="10" /> <input type="text" name="b" value="" size="10" /> <input type="submit" value="送信" /> </form> [例2] *****($a,$b); 上記[例1]の、aとbを、cgi[例2]の$aと$bに。 質問内容が分かりにくくて申し訳ございませんが、よろしくお願い致します。
- ベストアンサー
- CGI
- cgiからcgiを呼び出す方法2
先日「cgiからcgiを呼び出す方法」で質問させていただいたのですが、 その後の状況にて新たな質問をさせていただきます。 【経緯】 もともと単体で動作していたcgi Aに対して新たにcgi Bを作成し、 cgi Bからcgi Aを呼び出したいのですが、うまくいきません。 cgi A:アンケート回答フォームのようなもの cgi B:認証フォーム(コードを入力してDB内のデータと一致したらcgi Aを呼び出したい) 【その後の状況】 exec("perl A.cgi"); とすることで cgi A の画面を表示することが出来ました。 【新たな質問】 (1) cgi A の画面は表示されましたが title は cgi B のままです。 exec で cgi A が呼び出された時点で title は cgi A にならないのでしょうか? (2)いろいろなサイトに、呼び出し先に "Content-Type: text/html; charset=Shift_JIS\n\n" の記述があってはダメとの説明がありましたが、この記述がないと cgi Aにてデータを入力し、送信ボタンを押すと 500 Internal Server Error(malformed header from script. Bad header~) が表示されてしまいます。 Content-Type の記述があれば、cgi A の送信ボタンを押すことによって 入力したデータがDBに格納され、また、title も cgi A のタイトルが表示されます。 【cgi A が呼び出された時点の画面イメージ】 cgi B のタイトル Content-Type: text/html; charset=Shift_JIS cgi A のタイトル cgi A の入力項目 cgi A の送信ボタン cgi A の送信ボタン(submit)を押すことによって、完全に cgi Aに制御が渡るということでしょうか? cgi A を呼び出した時点で完全に cgi A に制御を渡したいのですが、 どなたかアドバイスをお願いします。 cgi A の構成を変える必要があるようであれば、その当たりのアドバイスもお願いします。
- ベストアンサー
- CGI
- POST形式でファイルを送ると、CGIモジュールでエラーが出ます。
ファイルを添付できるメールフォームを作ろうと思いました。 まず呼び出し側のHTMLファイルを以下のようにしました。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> <form action="./filemail.cgi" method="post" enctype="multipart/form-data"> <input type="file" name="file-1"><br /> <input name="submit" type="submit" value="送信"> </form> </body> </html> しかし受け手のCGIの方でエラーが出ます。 エラー原因を調べるためプログラムのコードをとことんまで削りました。 #! usr/bin/perl -d use strict; use warnings; use CGI::Carp qw(fatalsToBrowser); use CGI; our $q=new CGI; ・・・A print $q->header(-charset=>'utf-8'), $q->start_html(-charset=>'utf-8', -lang=>'ja-JP'), "うまくいった~~^^v\n", $q->end_html; それでもエラーが出ます。エラー箇所はAの our $q=new CGI; です。 エラーメッセージは Software error: CGI open of tmpfile: No such file or directory です。 ちなみにコードを削りまくったこのプログラムはフォームデータとまるで関係ないので、ブラウザのURL窓にURLを手入力して呼び出してみました。 http://127.0.0.1//filemail.cgi これは目出度く正常に動作します。 うまくいった~~^^v またファイルを添付せずにフォームの送信ボタンをクリックしても正常に動作します。 そしてファイルを添付しても、フォームの送信方法をPOSTではなく、GETにしたら正常に動作します。 要するに、フォームの送信方法がPOSTの場合に、ファイルを添付して送信ボタンをクリックすると前述のエラーが出ます。 エラーメッセージからしてCGIモジュールで何か問題が起きているのですが、CGIモジュールとPOSTによるファイル送信は相性が良くないのでしょうか。それとも何か他にやるべきことがあるのでしょうか。 お手数をお掛けします。
- ベストアンサー
- Perl
補足
わかりやすいサイトや書籍を教えていただけると助かります。