Athabaska Dick
Athabaska Dick

Reputation: 4281

How to retrieve form "POST" data via cgi-bin program written in C

I am trying to retrieve POST data from html form using program written in C.

At the moment I am using:

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

This seems to be working fine with form "GET" method but not with "POST" method. How do I retrieve POST data?

Upvotes: 11

Views: 21770

Answers (3)

pmg
pmg

Reputation: 108978

If I remember right, read stdin for POST data.


Edit for untested snippet

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);

Upvotes: 14

Sherm Pendley
Sherm Pendley

Reputation: 13612

Why reinvent that wheel? Just use a library: http://libcgi.sourceforge.net/

Upvotes: 3

salezica
salezica

Reputation: 77029

POST data is appended to the request header, after a double newline. In a CGI-BIN environment, you read it from STDIN.

Be warned that the server IS NOT REQUIRED to send you an EOF character (or some termination indicator) at the end of the POST data. Never read more than CONTENT_LENGTH bytes.

Upvotes: 16

Related Questions