如何通过用C编写的cgi-bin程序检索表单“POST”数据

时间:2011-03-27 19:50:59

标签: c forms environment-variables http-post cgi-bin

我正在尝试使用C语言编写的程序从html表单中检索POST数据。

目前我正在使用:

char *formdata = getenv("QUERY_STRING");
if(formdata == NULL) /* no data retrieved */

这似乎与表单“GET”方法一起使用,但不适用于“POST”方法。如何检索POST数据?

3 个答案:

答案 0 :(得分:11)

如果我没记错,请阅读stdin了解POST数据。


编辑未经测试的代码段

len_ = getenv("CONTENT_LENGTH");
len = strtol(len_, NULL, 10);
postdata = malloc(len + 1);
if (!postdata) { /* handle error or */ exit(EXIT_FAILURE); }
fgets(postdata, len + 1, stdin);
/* work with postdata */
free(postdata);

答案 1 :(得分:10)

POST数据在双换行符后附加到请求标头。在CGI-BIN环境中,您可以从STDIN中读取它。

警告服务器不需要在POST数据末尾向您发送EOF字符(或某些终止指示符)。永远不要读取超过CONTENT_LENGTH个字节。

答案 2 :(得分:4)

为什么重新发明那个轮子?只需使用图书馆:http://libcgi.sourceforge.net/