【HTTP】另類的POST頭數據 RFC1867協議格式簡析
http://blog.csdn.net/ai2000ai/article/details/52161979
昨天在實戰表單模擬提交的時候,有發現在提交某個表單的時候,頁面(discuz!論壇)報錯,無法檢測到數據來源雲雲,但是我確實提交了http_referer了啊,怎麽會出現這個情況呢?問了下haohappy,他給了個pear的類,http/client,才發現,我研究了幾天的東東,原來有個現成的可以用,“使用pear站在巨人的肩膀上”,這個果然沒有錯。過些天組裝一個client試試看。 又扯遠了,書歸正傳,說研究一下一個另類的post頭,為什麽說另類呢,因為一般的post頭的 Content-Type: application/x-www-form-urlencoded 而他的是 Content-Type: multipart/form-data; boundary=-------7d71f4234700b8 那麽兩者的區別又在那裏呢?因為RFC1867增加了文件上傳的功能,而上傳文件內容自然也會被加入到HTTP的實體中。現在因為既有HTTP一般的參數實體,又有上傳文件的實體,所以用boundary把每種實體進行了分割,HTTP的實體看起來將是類似下面的樣子:
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="formhash"
59329e15
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="isblog"
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="fid"
104
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="subject"
test
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="iconid"
0
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="usesig"
1
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="message"
test
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attachperm[]"
0
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attachdesc[]"
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attach[]"; filename=""
Content-Type: application/octet-stream
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attachperm[]"
0
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attachdesc[]"
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="attach[]"; filename=""
Content-Type: application/octet-stream
-----------------------------7d71f4234700b8
Content-Disposition: form-data; name="wysiwyg"
1
-----------------------------7d71f4234700b8--
很明顯,增加了文件上傳後,HTTP實體變得稍微復雜了,首先是通過boundary把實體分開,以便於讀取,然後對FileUpload的格式也作了限制。
4、那麽同樣,這種格式也是需要提供Content-Length屬性的,那麽和簡單的post數據頭相比較,就可以發現,變化的地方有:
......
Content-Type:
......
Content-Length:
......
數據體 goes here~
註意到這幾個地方的變化後,就可以像往常一樣post了
【HTTP】另類的POST頭數據 RFC1867協議格式簡析