C++でブラウザからの入力を受ける方法がわからない

このQ&Aのポイント
  • C++のEXEをCGI-BINで動作させているが、ブラウザからの入力を受ける方法がわからない。
  • 自分のEXEでテストとブラウザに表示を成功させたが、POSTメソッドでの受け取りやブラウザの情報の取得方法がわからない。
  • EXEで受け取ったPOSTメソッドの内容やブラウザの情報(USER-AGENTやREFERRERなど)を取得する方法がわからない。教えてください。
回答を見る
  • ベストアンサー

C++でEXEを作成してCGI-BINで動作させてますが、ブラウザからの入力を受ける方法がわからん

自前のEXEでTESTとブラウザに表示させることに成功しました =========-- #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { cout << "Content-type: text/plain" << endl; cout << endl; cout << "test" << endl; return 0; } ==============--- さて、POSTメソッドで受けた内容や、ウラウザの種類やREFERなどはどうやってEXEで取得するのかがわかりません。教えてください。

  • CGI
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

getenv()を使います。 CGIが起動したとき、サーバーから送られたデータも環境変数に入ってますから、それを呼び出して使います。  簡単な例は C言語でCGI ( http://pub.cozmixng.org/~rwiki/index.rb?cmd=view;name=C%B8%C0%B8%EC%A4%C7CGI )  の中ほどに、 環境変数のおもなものは Enviroment Variable and FORM,COOKIE ( http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi ) 詳細は CGIプログラムに渡す環境変数 ( http://www.hitachi.co.jp/Prod/comp/soft1/manual/pc/d3M1501/EM150111.HTM )  とか

fasdfasdf
質問者

お礼

すばらしいウェブサイトですね GOOGLEで探していたのですが出てきませんでした

関連するQ&A

  • 【C++】関数ポインタの使い方

    関数ポインタの使い方で悩んでいます。 下記の (1)のようにグローバルメソッドとして定義したメソッドを関数ポインタに代入することは出来るのですが、 (2)のようにクラスのメンバメソッドとして定義したメソッドは関数ポインタに代入することは出来ませんでした。 Error:バインドされた関数へのポインターは関数の呼び出しにのみ使用できます。 というエラーが発生します。 関数ポインタに外部参照でメソッドを代入することは出来ないのでしょうか? -----(1)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; int f(int a, int b){ return a * b; } int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; fp = f; cout << fp(1,2) <<endl; getchar(); return 0; } ------------------------------------------------------------------------- -----(2)------------------------------------------------------------------ #include "stdafx.h" #include <iostream> using namespace std; class MPointerList{ public: int f(int a, int b){ return a * b; } }; int _tmain(int argc, _TCHAR* argv[]) { typedef int (* FUNC_POINTER)(int, int); FUNC_POINTER fp; //fp = f; MPointerList mP; fp = mP.f; cout << fp(1,2) <<endl; getchar(); return 0; } -------------------------------------------------------------------------

  • コマンドライン引数

    下記のリストの結果は自分の期待では「真」なのですが 「偽」となります。 なぜなのかわけが分からなくなって質問させて頂きまし た。 (なお後尾の2行はチェックするために入れただけです。) どなたかご教示願えませんでしょうか。 よろしくお願いします。 リスト #include <iostream> using namespace std; int main(int argc, char *argv[]) { if( argv[1] == "yes") { cout << "真です。" << endl; } else { cout << "偽です。" << endl; } cout << " argv[1] は " << argv[1] << " です。" << endl; cout << " argv[2] は " << argv[2] << " です。" << endl; }

  • プログラムの動作の仕方

    この下のプログラムは、WRITE <ファイル名>をコマンド行で入力すると、動作するプログラムなのですが、この通りにWRITE <test>としてもできません。 やり方を教えてください. #include <iostream> #include <fstream> using namespace std; int main(int argc,char *argv[]) { if(argc!=2){ cout << "使い方:WRITE<ファイル名>" << endl; return 1; } ofstream out(argv[1]); //出力ファイル if(!out){ cout << "出力ファイルが開けません" << endl; return 1; } char str[80]; cout << "文字列をディスクに書き込み、$で停止します" << endl; do{ cout << ": "; cin >> str; out << str << endl; }while(*str!='$'); out.close(); return 0; } お願いします。

  • VC++2010での漢字の引数の取り込みについて

    VC++2010で下記のプログラムでプログラムの実行ファイル名を取りこんでいるのですが、ファイルのパス名に漢字が入ると取り込めない場合があります。 #include "stdafx.h" #include <iostream> using namespace std; #ifdef _UNICODE wostream &_tcout = wcout; typedef wstring tstring; #else ostream &_tcout = cout; typedef string tstring; #endif int _tmain(int argc, _TCHAR* argv[]) { for(int i=0; i<argc; i++) _tcout << "argv[" << i << "] contains " << argv[i] << endl; return 0; } メニューの「プロジェクト」→「~のプロパティ」→「構成プロパティ」→「文字セット」 で、 ここを「マルチバイト文字セットを使用する」に設定して行うと漢字が入ったパスのファイル名もうまく取り込めるのですが、 ここを「Unicode文字セットを使用する」に設定すると漢字がうまく取り込めません。 Unicodeの設定で、漢字も取り込めるようなコードの書き方とか、VS2010の設定方法などがあれば教えていただきたいのです。 よろしくお願い致します。

  • _TCHAR*での引数の読み込み

    VC++2010での、通常の #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } のウィザードを使って、arvg[1]やargv[2]に引数を与えて、本体内で通常のCで使う printf("%s\n", argv[1]); や fopen(argv[1], "r"); を使いたいのですが、引数の型が_TCHAR*になっているため文字がそのまま使えません。 int main(int argc, char *argv[]) で使えば問題なく使えるのですが、デフォルトのウィザードを使った時の使い方を知っておきたいのです。 御経験のある方、御教示お願い致します。

  • コマンドラインから引数を渡したいのですが・・・

    VC.NETで参考書に載っていた下のようなコードを書きました。 #include <iostream> #include <cstdlib> using namespace std; int main (int argc, char *argv[]) { int sum; if (argc != 3) { cout << "引数の個数が違います。"; return 1; } sum = atoi (argv[1]) + atoi (argv[2]); cout << "合計=" << sum << '\n'; return 0; } しかしながら、引数の個数が違います。としか出力されません。どうすればよろしいでしょうか?

  • C++流入力の妥当性チェック方法

    お世話になります。 C言語の入門書には、scanfを使って数字を入力させる時は、一旦文字列に入力させ、atoiを使って数値に変換すると良いと書いてありました。 #include "stdafx.h" #include "iostream" #include "cstring" #include "string" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int num=0; // char tmp[20]; string tmp; num=atoi(gets(tmp)); cout << num; return 0; Cの本にかいてある物をC++っぽく書いてみたつもりです。 しかしこれではchar tmp[20]を使ったとき、入力した文字列が数字以外の時はnum=0になってしまい、入力として0を与えたのか入力エラーなのか判定できません。 また、tmp[20]としているので、20文字以上入力された場合、実行エラーが発生してしまいます。 そこで、string tmpとしてやることで、入力される文字数を考えることなくプログラミングできるようにすればいいじゃないかと考えたのですが、atoiはcharにしか対応していないので、stringでは使えません。 stringを使って入力される文字数問題を考えることなく、また、数字以外の入力を受け付けないようにするスマートな方法はないのでしょうか?

  • C言語のprintfで桁数をそろえる

    次ので桁数をそろえると書いてあったけどやってみたらできなかった。 コンパイラはMS visual c++バージョンはおそらく7.1.3019 #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { int a; scanf("%d",&a); printf("a=%3d\n",a); return 0; }

  • C++のifstreamの使い方

    C++のifstreamの使い方で分からない所があるので、分かる方御教示ください。 下記は、C++で読み込んだファイルの中身が空だった場合を無理やり例外処理を使って書いてみたのですが、中身が存在する場合、たとえば、 line1 line2 line3 ではline1を無限に繰り返してしまいます。(1)を ifstream instream = inStream(argv[1]); while (instream >> input) にするとうまくいくようなのですが、この違いがよくわかりません。 違いを教えてください。 #include <iostream> #include <string> #include <fstream> using namespace std; ifstream inStream(char *str); int main(int argc, char *argv[]) { if (argc < 2) cout << "ファイル名を指定してください" << endl; else { try { string input; while (inStream(argv[1]) >> input) // (1) cout << input << endl; } catch (int i) { cerr << argv[1] << "を開けません" << endl; } } return 0; } ifstream inStream(char *str) { ifstream inStream(str); if (!inStream) throw 1; return inStream; }

  • argv内容の表示動作

    プログラミング初心者です。 コンソールアプリケーションのプログラミングの練習として、コマンドライン引数を表示することを考えています。書籍等を参考に手元で入力したソースでは、先頭の一文字しか表示されません。例えば、コマンドラインから > test.exe abc def ghi と入力すると、 > argv[0] = t > argv[1] = a > argv[2] = d > argv[3] = g と表示されます。 環境はWindowsXP + VisualStudio2008で、ソースは下のような具合です。 #include "stdafx.h" int _tmain(int argc, _TCHAR *argv[]){ int i; for ( i = 0; i < argc; i++){ printf("argv[%d] = %s\n", i, argv[i]); } return 0; } どの箇所が原因でこのようになってしまうのでしょうか?

専門家に質問してみよう