C语言构建WEB管理系统(四):CGI程序解析POST数据
来源:互联网 发布:无主之地ol激活码淘宝 编辑:程序博客网 时间:2024/05/25 21:32
【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】
这一节我们将介绍如何解析POST方式提交的表单数据,在前面说过POST提交的数据没有放在QUERY_STRING环境变量中,我们将上一节的示例表单直接改为POST方式如下:
<body> <p> 登录信息: </p> <!--<form action="/cgi-bin/print.cgi">--> <form action="/cgi-bin/print.cgi" method="post"> 用户名: <input type="text" name="用户名"/> <br /> 密码: <input type="password" name="密码" /> <br /> <input type="radio" name="语言" value="English"/> English <br /> <input type="radio" name="语言" value="Chinese"/> 简体中文 <input type="hidden" name="sessionid" value="1234567890"/> <br /> <input type="submit" value="登录"> <br /> </form> </body>
再运行可以看到点击”登录“之后,页面显示如下:
意料之内,没有获取到任何信息,因为提交数据没有在环境变量QUERY_STRING中。事实上用户提交的数据存放在CGI进程的标准输入中,而同时数据的长度赋予环境变量中的CONTENT_LENGTH。使用wireshark抓包也可以看到表单提交的数据所处位置:
所以要获取POST方式提交的数据,需要首先从环境变量CONTENT_LENGTH中获取数据长度,然后再从标准输入中去读该长度个字节,最后再按照上一节解析GET方式数据一样去解析数据。下面为获取POST数据集解析数据代码:
int main(int argc, const char *argv[]){ char *data = NULL, *data_len_str = NULL; int data_len, read_len; fprintf(stdout, "Content-Type: text/html\r\n\r\n"); data_len_str = getenv("CONTENT_LENGTH"); if (NULL == data_len_str) { data_len_str = ""; } data_len = atoi(data_len_str); if (data_len < 0) { return -1; } data = (char *)malloc(data_len); if (NULL == data) { return -1; } read_len = fread(data, 1, data_len, stdin); if (read_len != data_len) { return -1; } fprintf(stdout, "<HTML>\n"); fprintf(stdout, "<HEAD>\n"); fprintf(stdout, "<TITLE>CGI解析POST数据</TITLE>\n"); fprintf(stdout, "<HEAD>\n"); fprintf(stdout, "<BODY>\n"); fprintf(stdout, "<H3>以下为解析后数据</H3>\n"); sln_cgi_content_parse(data, data_len); fprintf(stdout, "本网页由CGI自动生成!\n"); fprintf(stdout, "</BODY>"); fprintf(stdout, "</HTML>"); free(data); return 0;}
将编译后的程序放在/cgi-bin/目录下,在页面填好数据按”提交“按钮页面显示如下:
说明POST数据已经解析成功!
2 0
- C语言构建WEB管理系统(四):CGI程序解析POST数据
- C语言构建WEB管理系统(三):CGI程序解析GET数据
- C语言构建WEB管理系统(二):了解CGI
- C语言构建WEB管理系统(五):CGI实现上传文件
- C语言构建WEB管理系统(六):使用XMLHttpRequest对象和服务端交换数据
- c语言之学生管理系统程序(四)
- C语言CGI程序--POST表单/GET表单处理
- C语言构建WEB管理系统(一):了解http协议
- C语言-----CGI程序
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- 用c语言写cgi程序(4)---处理请求post get。文本框,下拉列表框。
- C语言写CGI程序
- C语言写CGI程序
- C语言编写CGI程序
- c语言实现cgi程序
- C语言写CGI程序
- C语言写CGI程序
- 问题 A: 省赛专用题(1)
- JavaScript 进阶教程目录
- IplImage 4通道转3通道
- HDU-1716()(全排列+重集排列)
- [代码分享]UIImage:获取图片主色调
- C语言构建WEB管理系统(四):CGI程序解析POST数据
- 冒泡排序和快速排序java实现
- ORACLE调整归档日志大小
- 157.View the Exhibit and examine the structure of the ORDERS and CUSTOMERS tables.
- CentOS下安装中文输入法、gcc、g++、gdb
- Java-异常
- 使用eclipse直接生成so文件
- Android 手机自动化测试工具
- TCP/IP详解:第一、二章读书笔记