【问题标题】:Cannot get HTTP POST's body in FastCGI application无法在 FastCGI 应用程序中获取 HTTP POST 的正文
【发布时间】: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表单发送的数据并不干净。

【问题讨论】:

    标签: http post nginx fastcgi


    【解决方案1】:

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

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

    您需要注意解析 multipart/form-data 正文。

    【讨论】:

      猜你喜欢
      • 2017-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      相关资源
      最近更新 更多