AN HTTPD ゲストブック/コメント集(2001年8月1日15:28)


επιστημη ffukuda@ntes.nec.co.jp 2001/08/02 10:44

中田さん、ありがとうございます。解決しました。

> GETメソッドでは、環境変数 QUERY_STRING から取得します。

すっごく了解。どチョンボでした。^^;

> POST では、標準入力から取得でいいはずですが、getline でいいかどうか。。(?)
> 普通、環境変数 CONTENT_LENGTH 分だけ読み込みます。

これでうまくいったです:

  _setmode( 0, _O_BINARY ); // 標準入力をbinary-modeに(いらないかも) 
size_t length = atoi(getenv("CONTENT_LENGTH")) + 1;
char* input = new char[length];
cin.getline(input,length);
...
delete[] input;


中田昭雄 nakata@st.rim.or.jp 2001/08/01 21:09

επιστημηさん、
GETメソッドでは、環境変数 QUERY_STRING から取得します。
POST では、標準入力から取得でいいはずですが、getline でいいかどうか。。(?)
普通、環境変数 CONTENT_LENGTH 分だけ読み込みます。

Perl では、

  if ($ENV{'REQUEST_METHOD'} eq "GET") { 
$in = $ENV{'QUERY_STRING'};
} elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
}
などとします。


επιστημη ffukuda@ntes.nec.co.jp 2001/08/01 15:28

επιστημη@C++屋です。はじめまして。

早速ですが、AnHTTPdでC++でちょっとしたCGIを書こうと遊び始めたところです。

#include <iostream> 
#include <string>
#include <cstdlib> // getenv

using namespace std;

int main() {
cout << "Content-Type: text/plain; charset=shift_jis\n" << endl;

const char* e = getenv("inputtext");
if ( e && *e ) {
cout << "inputtext=" << e << endl;
} else {
cout << "'inputtext' not specified" << endl;
}
cout << "strings from 'cin'" << endl;
for (;;) {
string line;
getline(cin, line);
if ( cin.eof() ) break;
cout << line << endl;
}
cout << "-------" << endl;
return 0;
}
なんてのをこさえて ./cgi_bin/cpp_trial.exe とし、
formからGET/POSTしてみたんですが、環境変数/標準入力 ともに'からっぽ'なんです。
どーしたものでしょう...?