HTTP POST方法的学习

来源:互联网 发布:万网域名解析到淘宝店 编辑:程序博客网 时间:2024/05/29 20:01

在POST方法下,CGI程序可以直接从服务器的标准输入中获取数据,不过要先从CONTENT_LENGTH这个环境变量中得到POST参数的长度,然后再读取相应长度的内容。


先弄个post.html,并放到htdocs目录下。

<html><head><title>CGI POST</title></head><body><tr><td><div>Method:POOST</div><div>Please input two number:</div><form method="post" action="/cgi-bin/post"><input type="txt" size="3" name="m">*<input type="txt" size="3" name="n">=<input type="submit" value="result"></form></td></tr></body></html>


代码如下:

#include <iostream>#include <stdlib.h>#include <string>#include <vector>#include <stdio.h>int post_method(){std::cout<<"Content-type:text/html\r\n\r\n";std::cout<<"<html>\n";std::cout<<"<head>\n";std::cout<<"<title>Testing Post</title>\n";std::cout<<"</head>\n";std::cout<<"<body>\n";std::cout<<"get parameter:<br/>";char *lenstr = getenv("CONTENT_LENGTH");if(lenstr == NULL){std::cout<<"Error, CONTENT_LENGTH should be entered"<< "<br/>";}else{int len = atoi(lenstr);char poststr[20];fgets(poststr, len + 1,stdin);std::cout<<"poststr:"<< poststr<<"<br/>";char m[10];char n[10];if(2 != sscanf(poststr,"m=%[^&]&n=%s",m,n)){std::cout<<"Error:Parameters are not right!<br/>";}else{std::cout<<"m*n="<<atoi(m)*atoi(n)<<"<br/>";}}std::cout<<"</body>\n";std::cout<<"</html>\n";return 0;}int main(){post_method();return 0;}


编译:

 g++ 2.cpp  -g -o post

拷贝:

cp /share/post cgi-bin/