我在写一个简单的http服务器,并且我想使用php-cgi
来处理POST
请求。我写的handlePOST
如下:Http服务器使用C++将数据发布到php-cgi
void KServer::handlePOST(int sockfd, string file, string pdata){
char* argvs[MAX_PARAMS];
argvs[0] = const_cast<char*>(CGI_PATH);
argvs[1] = const_cast<char*>(file.c_str());
stringstream ss;
ss<<pdata.length();
string clen, sname;
ss>>clen;
clen = "CONTENT_LENGTH=" + clen;
sname = "SCRIPT_FILENAME="+file;
char* env[] = {
"REQUEST_METHOD=POST",
"REDIRECT_STATUS=CGI",
const_cast<char*>(clen.c_str()),
const_cast<char*>(sname.c_str()),
"CONTENT_TYPE=application/x-www-form-urlencoded",
0
};
istringstream stream(pdata);
cin.rdbuf(stream.rdbuf());
execve(argvs[0], argvs, env);
...
我知道php-cgi
从STDIN
得到POST
数据。我把POST
数据(变种pdata
)放入cin.rdbuf
。但是,执行execve时,程序无法从STDIN
获取数据。但如果我使用控制台输入字符串,程序可以正常运行。