2010-02-21 261 views
54

我正在嘗試開發一個側欄小工具,它可以自動檢查我的傳輸配額演變過程中的網頁。我差不多在它,但有一個最後一步,我需要它的工作:發送一個HttpRequest與正確的POST數據到一個PHP頁面。使用Firefox的插件,這裏是標題的「內容類型」的模樣:HTTP多部分(POST)請求中的邊界參數是什麼?

Content-Type=multipart/form-data; boundary=---------------------------99614912995 

與參數「邊界」似乎是隨機的,而POSTDATA是這樣的:

POSTDATA =-----------------------------99614912995 
Content-Disposition: form-data; name="SOMENAME" 

Formulaire de Quota 
-----------------------------99614912995 
Content-Disposition: form-data; name="OTHERNAME" 

SOMEDATA 
-----------------------------99614912995-- 

我不明白如何正確模擬帶有神祕「邊界」參數的POSTDATA。

會有人知道我該如何解決這個問題嗎?

+0

您是否找到解決方案?如何使用curl發送像SOMENAME,OTHERNAME這樣的字段? – 2015-02-08 19:50:45

+0

我有類似經歷的問題列出[這裏] [1] [1]:http://stackoverflow.com/questions/31774695/using-multipart-without-form-in-spring-mvc – 2015-08-04 17:40:40

回答

35

邊界參數在末尾設置爲連字符加上一個隨機字符串,但您可以將其設置爲任何值。問題是,如果邊界字符串出現在請求數據中,它將被視爲邊界。

有關一些提示以及發送multipart/form-data的示例函數,請參見我對this question的回答。修改該函數以便爲要發送的每個部分使用循環不會太困難。

+0

謝謝!這幫助我接近我的目標! 還沒有成型,但是這種澄清;-) – 2010-02-22 13:46:00

+3

注:內容長度應該改變whene邊界變化 – K3rnel31 2014-04-16 10:23:23

+0

這對我幫助很大謝謝:) – wayzz 2016-08-17 09:30:26

69

要從RFC 1341, section 7.2.1報價,我認爲是在(對MIME)的Content-Type頭的boundary參數中的相關位:

的「多」的所有亞型都有一個共同的語法...

多部分實體的Content-Type字段需要一個參數「boundary」,該參數用於指定封裝邊界。封裝邊界被定義爲完全由兩個連字符組成的行(「 - 」,十進制代碼45),後跟來自Content-Type標題字段的邊界參數值。

,然後澄清:

因此,一個典型的多部分Content-Type頭字段可能是這樣的:

Content-Type: multipart/mixed; boundary=gc0p4Jq0M2Yt08jU534c0p 

這表明實體由幾部分,每個部分本身的結構在語法上與RFC 822消息相同,只是頭部區域可能完全是空的,並且pa RTS分別由線之前 --gc0p4Jq0M2Yt08jU534c0p

注意事項:

  1. 封裝邊界必須出現在一行的開頭,即,遵循CRLF(回車換行)
  2. 邊界必須立即由另一個CRLF和下一個零件的頭字段或兩個CRLF跟隨,在這種情況下,下一個零件沒有頭字段(因此它被假定爲Content-Type text/plain)。
  3. 封裝邊界不得出現在封裝內,並且不得超過70個字符,不包括兩個前導連字符。

最後但並非最不重要的:

繼上身體部位的密封邊界是一位傑出的定界符,表示沒有進一步的身體部位會隨之而來。這樣的分隔符是等同於以前的分隔符,用多了兩個連字符在該行的末尾:

--gc0p4Jq0M2Yt08jU534c0p-- 

我希望這可以幫助別人的未來,因爲我有漫遊的而在全面瞭解之前(請確保閱讀必要的RFC以獲得最深入的瞭解)。

+2

注:內容長度應該改變whene邊界變化 – K3rnel31 2014-04-16 10:23:51

+0

我想邊界用於分隔不同的部分,不指示長度。 – Rugal 2015-10-04 01:29:34

+1

順便說一句,這個答案很棒! – Rugal 2015-10-04 01:29:46