在FastCGI应用程序中无法获取HTTP POST的主体

前端之家收集整理的这篇文章主要介绍了在FastCGI应用程序中无法获取HTTP POST的主体 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我在C应用程序中将http://fastcgi.com/中的库用作后端,而Nginx Web服务器用作前端.

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

  1. <form action="/upload" enctype="multipart/form-data" method="POST">
  2. <input type="test" name="text1" />
  3. <input type="file" name="file1" />
  4. <input type="submit" />
  5. </form>

通过接受请求

  1. int FCGX_Accept_r(FCGX_Request *request);

在FCGX_Request内部,我们有3个流:in,out,err. “ in”流中的标志为isReader == 1,其他的isReader == 0.

  1. typedef struct FCGX_Stream {
  2. unsigned char *rdNext; /* reader: first valid byte
  3. * writer: equals stop */
  4. unsigned char *wrNext; /* writer: first free byte
  5. * reader: equals stop */
  6. unsigned char *stop; /* reader: last valid byte + 1
  7. * writer: last free byte + 1 */
  8. unsigned char *stopUnget; /* reader: first byte of current buffer
  9. * fragment,for ungetc
  10. * writer: undefined */
  11. int isReader;
  12. int isClosed;
  13. int wasFCloseCalled;
  14. int FCGI_errno; /* error status */
  15. void (*fillBuffProc) (struct FCGX_Stream *stream);
  16. void (*emptyBuffProc) (struct FCGX_Stream *stream,int doClose);
  17. void *data;
  18. } FCGX_Stream;

所有指针rdNext,wrNext,stop == 0之间的差异.差异(stop-stopUnget)约为0x500.

读取stopUnget和stop之间的数据会给我Nginx发送到我的应用程序的“ FASTCGI转储”,但是没有通过表单发送的数据.

但是,Nginx和fastcgi应用程序之间的嗅探器显示Nginx正确发送了HTTP POST的正文,包括1MB jpeg文件.

因此,如何通过POST请求获取HTML表单发送的数据并不干净.

最佳答案
libfcgi提供了从输入流中读取的三个函数FCGX_GetStr,FCGX_GetLine和FCGX_GetChar.

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

您将需要解析multipart / form-data主体.

猜你在找的Nginx相关文章