在FastCGI应用程序中无法获得HTTP POST的正文

我使用C ++应用程序中的http://fastcgi.com/作为后端,使用nginxnetworking服务器作为前端。

从HTML表单成功发布1MB文件和variables“CONTENT_LENGTH”足够大:)但我不知道如何使用libfcgi访问POST请求的主体。 这是我的HTML格式,它的效果很好。

<form action="/upload" enctype="multipart/form-data" method="POST"> <input type="test" name="text1" /> <input type="file" name="file1" /> <input type="submit" /> </form> 

要求被接受通过

 int FCGX_Accept_r(FCGX_Request *request); 

在FCGX_Request内部,我们有3个stream:进出,错误。 “in”stream的标志isReader == 1,其他的isReader == 0。

 typedef struct FCGX_Stream { unsigned char *rdNext; /* reader: first valid byte * writer: equals stop */ unsigned char *wrNext; /* writer: first free byte * reader: equals stop */ unsigned char *stop; /* reader: last valid byte + 1 * writer: last free byte + 1 */ unsigned char *stopUnget; /* reader: first byte of current buffer * fragment, for ungetc * writer: undefined */ int isReader; int isClosed; int wasFCloseCalled; int FCGI_errno; /* error status */ void (*fillBuffProc) (struct FCGX_Stream *stream); void (*emptyBuffProc) (struct FCGX_Stream *stream, int doClose); void *data; } FCGX_Stream; 

所有指针rdNext,wrNext,stop == 0之间的区别。差异(stop-stopUnget)大约是0x500。

读取stopUnget和停止之间的数据给我由nginx发送到我的应用程序的“FASTCGI转储”,但没有数据通过表单发送。

虽然,nginx和fastcgi应用程序之间的嗅探器显示nginx正确发送HTTP POST的正文,包括1MB的jpeg文件。

所以,如何通过POST请求获取由HTML表单发送的数据并不是一件简单的事情。

libfcgi提供了三个函数来读取输入流FCGX_GetStrFCGX_GetLineFCGX_GetChar

 while (FCGX_GetStr(buf, sizeof(buf), request.in) > 0) { /* ... */ } 

您将需要照顾解析multipart/form-data主体。