【发布时间】:2011-11-11 07:34:10
【问题描述】:
我在 C++ 应用程序中使用来自 http://fastcgi.com/ 的库作为后端,使用 nginx 网络服务器作为前端。
从 HTML 表单成功发布 1MB 文件,并且变量“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 个流:in、out、err。 “in”流的标志 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 和 stop 之间的数据给我 nginx 发送到我的应用程序的“FASTCGI-dump”,但没有通过表单发送数据。
虽然,nginx 和 fastcgi 应用程序之间的嗅探器显示 nginx 正确发送 HTTP POST 的正文,包括 1MB jpeg 文件。
因此,如何通过POST请求获取HTML表单发送的数据并不干净。
【问题讨论】: