• 締切済み

HTTP POST によるレスポンスCGIについて

HTTP POST によるレスポンスCGIについて いつも大変お世話になっております。 タイトルのシステムの組み方についてご質問がございます。 「内容」 決済システム会社からのリクエストに対するレスポンスを返すCGIを作成します。 「仕様」 通信方法:HTTP POST キャラクタセット:Shift-JIS text/csv(←ここの意味もわかりません) 仕様書には 「Httpリクエストに対するレスポンスとしてHTTPボディ部に記述してください」 例) 処理OKの場合:OK,    処理NGの場合:NG,既に完売済み CSV形式(カンマ区切り) とあります。 私のスキルとしては、「html」「PHP」が書ける程度です。 javaやPerlは全然分かりません。 仕様は単純かと思いますが、リクエストに対して自動でレスポンス(OKかNG)を返す仕組みが分かりません。 ご教授願いますでしょうか。

  • CGI
  • 回答数2
  • ありがとう数15

みんなの回答

回答No.2

>リクエストに対する処理は特に指定がないので、おっしゃる通り、単純に画面上に"NG,テスト"と出すhtmlだけを記述してテストしたのですがエラー「レスポンスボディの処理結果はOKまたはNGで入力してください。」で返されてしまいました。 >以下構文です。 NG以外に「,テスト」って文字が入ってるからエラーになってるとかではないですよね?? >又、action先に送信(レスポンスを返す)するには、submitする以外に、自動で送信する方法があるのでしょうか。 たしかあったはずです。Javascriptで昔実装した記憶があります。ただその時はリダイレクトでhidden値をpost送信、みたいな感じだったと思いますが、詳しくは「javascript post送信」などで調べるとたくさん出てきますよ。

jipang5054
質問者

お礼

お礼が遅くなりましたこと大変申し訳ございません。 色々と試した結果、単純にbody部に「OK,」を表示させるCGIを作成するだけでよかったみたいです。 POSTで送信とかゴチャゴチャ考えすぎだったようです。 お付き合いいただきありがとうございました。 感謝申し上げます。

jipang5054
質問者

補足

返信が遅くなりました。 NG以外に「,テスト」って文字が入ってるからエラーになってるとかではないですよね?? ⇒仕様書に書かれてある通りですので問題ないかと思います。 まずは「javascript post送信」で色々と調べてみます。 ありがとうございました。 またご連絡します。

回答No.1

PHPを理解していることを前提で書きますね。 正直仕様書を見せて欲しいレベルで内容がわかりませんが(笑)多分APIのようなものを作ろうとしているのかな、と想像します。 決済システム会社からPOSTを使ってリクエストが届くので、それを適切に処理して単純に画面に出すような処理をすれば良いのではないでしょうか?フォームを使った投稿処理とさほど変わらないと思います。 ちなみにPHPができるならPerlでもJAVAでもやることは同じですから、あまり難しく考え過ぎない方が良いです。 ※見当違いな回答でしたら指摘してください。

jipang5054
質問者

補足

お忙しい中ご連絡ありがとうございます。 リクエストに対する処理は特に指定がないので、おっしゃる通り、単純に画面上に"NG,テスト"と出すhtmlだけを記述してテストしたのですがエラー「レスポンスボディの処理結果はOKまたはNGで入力してください。」で返されてしまいました。 以下構文です。 <!DOCTYPE HTML PUBliC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/csv; charset=shift_jis" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <meta content="86400" http-equiv="Expires"/> <link rel="stylesheet" type="text/css" href="./css/main.css"> <link rel="shortcut icon" href="" /> <meta name="description" content="商品決済システム"> </head> <form action="アクション先" method="post"> NG,テスト </form></html> html自体もそんなに理解してはおりませんので 見当違いな記述でしょうか。 又、action先に送信(レスポンスを返す)するには、submitする以外に、自動で送信する方法があるのでしょうか。 お付き合いいただければ幸いでございます。 何卒宜しくお願い申し上げます。

関連するQ&A

  • HTTP レスポンスヘッダ

    URLを指定してHTTP レスポンスヘッダ等が確認できるサイトで、 Request typeをGETやPOSTが選択可能なところを探しています。 少し探した結果、 http://web-sniffer.net/ というところが見つかりましたが、このようなサイトが他にもあれば教えてください。 宜しくお願いします。

  • HTTP_Requestのレスポンスの受け取り方

    HTTP_Requestのレスポンスを、POST形式で受け取りたいのですが、どのようにするのでしょうか? サンプルソースには、単にechoで表示させているだけです。 結局、これを解析するほかないのでしょうか? 日付(yyyy-mm-dd hh:mm:ss)の半角空白は、+(プラス)で置き換えられるのでしょうか?

    • ベストアンサー
    • PHP
  • RubyのHTTP POSTについて

    HTTP POSTについてお聞きしたいです。 http://ligin.weizmann.ac.il/~lpgerzon/mbs4/mbs.cgi のページに、自動で入力を投げて答えを返してもらうスクリプトを書きたいです。 dataに、Inputする文字列を&でつないで、 Net::HTTP.start('ligin.weizmann.ac.il', 80) {|http| response = http.post('/~lpgerzon/mbs4/mbs.cgi',data) puts response.body } という方法で実行してみたのですが、 帰ってくる出力が、上記のURIのソースのままになってしまいます。 GUIでクリックして入力した場合は、末尾がmbs3.cgiのページに移動するはずなのですが、 なぜか上手く入力を与えることができません。 説明が曖昧で申し訳ありません。 アドバイスなどだけでも構いませんので、 よろしくお願い致します。

    • ベストアンサー
    • Ruby
  • CGIで内部処理を待たずにレスポンスを返す方法

    ■質問 CGIで内部処理を待たずにレスポンスを返す方法について教示願います。 (関連サイトを調べていて、近しいものはあったのですが、なかなか今回の問題の原因と対処に結びつく有効な手がかりがない、苦慮しています。) ■詳細 <動作環境>  (1)画面(Java)→(2)Web(Apache)HTTPリクエスト→(3)CGI(C言語)  (3)→(2)を介して(1)へHTTPレスポンスを送信 この環境下で、(3)の中で(3)’処理((2)へのレスポンスとは非同期で 別処理(DBへ登録する処理)言語:cshをCの中からシステムコール。 cshの中でperl処理をキックし、DB更新)を今回追加しました。 (3)’を待たずに(1)へのHTTPレスポンスを返却したいのですが、 サーバログ((1)、(2))をみると、返却のタイムスタンプを見ると、 (3)’が完了した後に返却されているようです。 方式的に(3)の中でfolkを使用し、子プロセス化することで 親は子の処理((3)’)を待たずに(2)にレスポンスを返却可能とみておりましたが、そもそもCGI(C言語)ではできないものなのでしょうか? →C(親処理)の中にデバックを仕掛けたところ、親の終了後に子が動いているように見えています。 ■ソース(概要)※詳細(原本抜粋)が必要な場合は申しつけください。  IF文で定義  (1)forkで子の場合、    execlでcshを実行(cshには親でもらった引数を設定)  (2)親の場合、   デバックログファイルをクローズし、処理終了。 ■補足(その他気になっている点)  ・上記ソースでは、(1)の中では、親で使うログファイル出力   のcloseを行わず、処理終了していますが、問題ないか?  ・同(2)のとき、perlCGIでは、close(stdout);を明示しないと   HTTPレスポンスが返却されない(子の終了を待ってしまう)   旨、サイトの情報に記載がありましたが、C CGIでも同様に   何かしらの明示をしないと、待たされるのか? 以上です。

    • ベストアンサー
    • CGI
  • ブラウザでHTTPレスポンスがうけとれない

    単にIDを返すだけのWebサーバに、telnetから80番ポートにアクセスし、HTTPリクエストを送るとレスポンスを受け取れるのに ブラウザからアクセスするとレスポンスを受けとれずタイムアウトになってしまいます。 WireSharkでパケットを調べてみると、ブラウザからアクセスした場合も、 問題なくWebサーバからIDが返されていることは確認できました。 しかし、ブラウザではサーバからのレスポンス待ち状態が続き、しばらくするとタイムアウトになってしまいます。 また、他のPCのブラウザから該当のWebサーバにアクセスすると、 問題なくレスポンスをうけとりIDがブラウザに表示されることも確認しました。 何が原因でこういうことが起こるのでしょうか。 教えて頂けると大変助かります。 OS:Windwos 7 32bit ブラウザ:Explore8,Chrome サーバからのレスポンス(telnetでアクセスした際に取得したもの) HTTP/1.1 200 OK Content-Type: text/plain Server: Microsoft-IIS/6.0 X-Powered-By: ASP.NET Date: Mon, 20 Jan 2014 11:12:37 GMT Connection: close SYJ0P48

  • CGIで、HTTP エラー 406が出る

    ここで良いのかどうかと迷ったのですが、webサーバを立ち上げて、今までレンタルサーバに入っていたものを移していました。 ところが、今まで動いていたCGIの一部でエラーが発生します。 いろいろ調べた結果下記のような症状があることが解りました。 ----test.cgiここから------ #!/usr/bin/perl print"Content-type: text/html\n\n"; print"ok"; exit; ----test.cgiここまで------ 上の様なCGIを呼び出すのですが、 <form method="post" action="test.cgi"> <input type="submit" value="戻る" name="return"> </form> これで、以下のエラーが出ます ---------------------------------------------- リソースを表示できません 検索中のリソースは、このブラウザで開くことができません。 次のことを試してください: 別のリンク先を表示するには、[戻る] ボタンをクリックしてください。 [検索] ボタンをクリックして、インターネット上の情報を検索してください。 HTTP エラー 406 - 受信不可 Internet Explorer ---------------------------------------------- ただし、nameを使わない場合 <form method="post" action="test.cgi"> <input type="submit" value="戻る"> </form> valueが"更新"の場合、 <form method="post" action="test.cgi"> <input type="submit" value="更新" name="return"> </form> などは正常にcgiを行います。 多分漢字コードがshift-jiだから起こり、httpdに何か設定をしてやれば良いのではないかと思いますが、何をしたら良いのかが解りません。 ただし、諸般の事情によりshift-jisは変更できません。 よろしくお願いします。 FedoraCore4 perl-5.8.6-24 httpd-2.0.54-10.3 インストールは、FedoraCore4のサーバ最小設定でインストールして、後はyumでインストールしました。

  • socket通信でレスポンスを受け入れないようにするにはどうすればいいですか?

    socket SOCKET,2,1,0; select((select(SOCKET),$|=1)[0]); connect(SOCKET,pack('Sna4x8',2,80,scalar(gethostbyname('www.test.test')); print SOCKET "GET /test.cgi HTTP/1.1\r\n\r\n"; こんな感じでhttp://www.test.test/test.cgiをリクエストしているのですが、結果がわかっているので、レスポンスが必要ありません。 どうもリクエストが終わると<SOCKET>を実行しないでも勝手にレスポンスをサーバから読み込んでいるみたいです。 (なのでリクエストを送った後、ある程度の時間をおいてオフライン状態にしても<SOCKET>からレスポンスを読み取れます) レスポンスの結果は分かっているので読み込みたくないのですが、どうすればいいのでしょうか?

  • Rubyでnet::httpを用いてPOSTする

    今晩わ。 RubyでNet::HTTPをもちいてPOST送信する際の処理について 質問です。 Net::HTTPクラスのインスタンスメソッドのpostメソッドを用いて送信する場合 送信内容を # version 1.2 (Ruby 1.8.x or later) response = http.post('/cgi-bin/search.rb', 'query=subject&target=ruby') 上記のように、引数に渡していると思います。 このとき、値の中にパラメータのデリミタと同じ&を入れたい場合どうしたらいいのでしょうか? 例えば query=subject&target=ruby&PHP のような感じでvalueとして&を渡す場合です。 Net**HTTP::Postクラスのrequestメソッドを用いてハッシュとして渡した時は問題なかったのですが、上記のpostメソッドの時がPOSTされた値を取得するときにキチンと取得できませんでした。これはなにか対処方法があるのでしょうか? ご教授ください。 おねがいします。

    • ベストアンサー
    • Ruby
  • HTTP POST送信のヘッダの書き方

    http://appsv.ocrgrid.org/cgi-bin/weocr/nhocr.cgiに対して、 ファイルを送信してレスポンスを得たいのですがうまくいきません。 ヘッダの書き方が悪いのかデータの送り方に問題があるのか 文字コードの問題かいづれかの原因だと推測して色々試してみたの ですが正解が見つけられません。 お解りになる方ご教授いただけませんでしょうか? ■詳細 画像から一行の文字を解析表示するCGIで クライアント側には、日本語プログラム言語なでしこを利用して ファイル送信しています。 下記にサンプルコードとレスポンスヘッダを載せています。 ■プログラムの説明 テンポラリーフォルダにWEB上に用意されているサンプル画像 をダウンロードして、「あれ」と言う名前の変数にその画像 ファイルの内用を代入しています。 送信ヘッダとボディーデータを対象のCGIに先ほど取得した画像 データと保存先のファイル名を埋め込みポストしています。 #ここからサンプルプログラム サンプル画像先からHTTPデータ取得をファイル名に保存 あれにファイル名を読む 「User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; msn OptimizedIE8;JAJP) Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language:ja-JP Accept-Charset:Shift_JIS,utf-8;q=0.7,*;q=0.7 Referer:http://appsv.ocrgrid.org/nhocr/index-j.html Accept-Encoding:gzip,deflate Host:appsv.ocrgrid.org Connection:keep-alive Cache-Control:no-cache Content-Type:multipart/form-data;boundary=---------------------------7d925e1a230364」と、 「-----------------------------7d925e1a230364 Content-Disposition:form-data;name="userfile";filename="{ファイル名}" Content-Type:image/png {(あれ)}」を"http://appsv.ocrgrid.org/cgi-bin/weocr/nhocr.cgi"へHTTPポスト。 それをSJIS変換でメモ記入 ●サンプル画像先~「http://appsv.ocrgrid.org/nhocr/hello.png」で戻る。 ●ファイル名~「{テンポラリフォルダ}{サンプル画像からURLファイル名抽出}」で戻る。 #サンプルここまで /*■処理結果レスポンスの内用 HTTP/1.1 200 OK Date: Thu, 24 Sep 2009 07:09:53 GMT Server: Apache/2 Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Transfer-Encoding: chunked Content-Type: text/plain ; charset=utf-8 1e File transmission has failed. 0 レスポンス内用ここまで*/

  • jQueryのpostからのリクエストをCGIで受信して処理したい

    jQueryのpostからのリクエストをCGIで受信して処理したい こんにちわ。CGIはまったくの素人に近いですが、よろしくお願いします。 今作成中のページからjavascript(具体的にはjQuery)を使ってpostでリクエストをサーバに送信し、それをCGIで受け取ってカウンタを増やして返す的なことをやろうとしています。 送信側ではとりあえずページをロードしたら(view()で)リクエストを送り(下のtest.cgi)、帰ってきた値を(ID"count1"で)ページにまた反映するという形をとっています。 javascriptのpost部分抜粋 function view() {jQuery.post("../../../cgi-bin/test.cgi", {"key1":"1"}, function(data){ $("#count1").html(data) } ); }; 送信はできてるみたいなのですが受け取るCGIが問題で、「フォームからデータを送る場合」というのは山ほど解説があるのですが単純に送られてきたリクエストを受け取るのは下のプログラムではダメみたいです。 CGI部分 #!/usr/bin/perl my $counter=0; read( STDIN, $buffer, $ENV{'CONTENT_LENGTH'} ); $counter++; return("$counter"); 当初CGIが必要だとは思わずにいたので、昨日からCGIを勉強し始めたレベルの素人ですが じっくりと腰をすえて一人で解決する時間もないので、よろしくお願いします。

    • ベストアンサー
    • CGI