2011-11-11 62 views
3

我在C++應用程序中使用http://fastcgi.com/的庫作爲後端,並將nginx網絡服務器用作前端。無法在FastCGI應用程序中獲取HTTP POST的正文

從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犯錯。的 「中的」 流具有標誌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之間的差異,停止== 0的差值(停止 - stopUnget)爲約爲0x500 。

讀取stopUnget和stop之間的數據,給我發送nginx到我的應用程序的「FASTCGI-dump」,但沒有通過表單發送數據。

雖然,nginx和fastcgi應用程序之間的嗅探器顯示nginx正確發送HTTP POST的正文,包括1MB jpeg文件。

因此,如何通過POST請求獲取HTML表單發送的數據並不清晰。

回答

4

libfcgi提供了三個函數來讀取輸入流FCGX_GetStr,FCGX_GetLineFCGX_GetChar

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

您將需要照顧解析multipart/form-data正文。

相關問題