2016-02-29 51 views
0

我剛做了stackoverflow帳戶,因爲我使用我的C應用程序發送多部分/表單數據時出現嚴重問題。有很多圖書館可以用來發送,但爲了教育目的,我正在從頭開始,所以請耐心等待。c多部分表單數據返回來自服務器的錯誤請求

問題是,當我使用我的應用程序發送請求時,服務器碰巧返回400 Bad Request。我看到了類似的問題here on stackoverflow,我無法修復請求。下面是我的請求和從服務器返回的內容的屏幕截圖。

screenshot of program when run

// this is the temp_send which is incomplete 
// adds the post data later 
char *temp_send="POST http://localhost/france/test.php HTTP/1.1\r\n" 
       "Host: localhost\r\n" 
       "Accept: image/gif, image/jpeg, */*\r\n" 
       "Accept-Language: en-us\r\n" 
       "Content-Type: multipart/form-data; boundary=---------------------------7d41b838504d8\r\n" 
       "Accept-Encoding: gzip, deflate\r\n" 
       "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" 
       "Connection: keep-alive\r\n" 
       "Cache-Control: no-cache\r\n\r\n" 
       "---------------------------7d41b838504d8 Content-Disposition: form-data; name=\"name\"\r\n" 
       "%s\r\n" 
       "---------------------------7d41b838504d8--\r\n"; 

char *postdata="testval"; 

char *sendbuf=NULL; 
sendbuf=(char*)malloc(sizeof(char)*SENDLEN); 
sprintf(sendbuf, temp_send, postdata); 

注:不知何故, 「名爲testVal」 返回在<pre>標籤,但我需要的錯誤離開。我意識到這是一個廣泛的問題,但我只需要縮小multipart/form-data的發送範圍。

注2:我也知道,我可以使用application/x-www-form-urlencoded,我已經用它和它的作品,但因爲我會做文件上傳這要複雜得多,我需要使用multipart-form/data我試圖首先用簡單的純文本來降低複雜度

回答

0

我終於得到了如何使用multipart/post-data發佈簡單數據。我用小提琴手,看到數據如何傳遞。內容長度恰好爲238,我還沒有嘗試過使用其他數據,但將內容長度設置爲238或更高似乎始終有效。這是現在的代碼。

char *sendbuf="POST http://localhost/france/test.php HTTP/1.1\r\n" 
         "Host: localhost\r\n" 
         "Content-Length: 238\r\n" // content-length >=238 
         "Content-Type: multipart/form-data; boundary=----12345\r\n\r\n" 
         "------12345\r\n" 
         "Content-Disposition: form-data; name=\"name\"\r\n\r\n" 
         "This is the first string\r\n" 
         "------12345\r\n" 
         "Content-Disposition: form-data; name=\"hell\"\r\n\r\n" 
         "this is another string\r\n" 
         "------12345\r\n"; 

重要信息:內容長度似乎發送數據,也-數量是boundary.ie經過時很重要。如果邊界有k個破折號,那麼以下破折號似乎始終是k + 2

相關問題