模拟提交中multipart/form-data提交需要注意的问题

本文详细介绍了multipart/form-data提交数据的原理,强调了提交内容中分隔符的重要性。在HTTP头中指定的分隔符与实际提交数据中的分隔符存在差异,最后一个分隔符会多出两个"-",并以"--"结束。在编写模拟提交程序时,必须确保正确处理分隔符,否则会导致数据获取异常。
摘要由CSDN通过智能技术生成

       其实multipart/form-data上传数据的原理并不复杂,首先通过Content-Type字段指定提交的类型是multipart的,同时指定分隔符。比如:

Content-Type: multipart/form-data; boundary=---------------------------7da2ced220a6a

      而在提交的内容中,使用HTTP头中指定的分隔符,也就是前面的---------------------------7da2ced220a6a来进行分割,比如:

-----------------------------7da2ced220a6a
Content-Disposition: form-data; name="ctl00$ContentPlaceHolder1$texName"

testName

-----------------------------7da2ced220a6a
Content-Disposition: form-data; name="__EVENTTARGET"

-----------------------------7da2ced220a6a
Content-Disposition: form-data; name="__EVENTARGUMENT"

-----------------------------7da2ced220a6a
Content-Disposition: form-data; name="__LASTFOCUS"

-----------------------------7da2ced220a6a
Content-Disposition: form-data; name="__VIEWSTATE"

/wEPDwULLTE2ODIxMDQ5OTEPZBYCZg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YRYGZg9kFgJmDxYCHgdWaXNpYmxlaGQCAQ9kFg5mDxYCHgRocmVmBTMvVXNlck1hbmFnZS9Vc2VyQ29uc3VtZV9NeVVzZXJNYW5hZ2VMaXN0LmFzcHg/Z3A9LTFkAgEPFgIfAgUkL1VzZXJNYW5hZ2UvVXNlckV4Y2hhbmdlX0NvdXBvbi5hc3B4ZAICDxYCHwIFFS9Vc2VyVG9vbHMvSW5kZXguYXNweGQCAw8WAh8CBR8vVXNlck1hbmFnZS9Qcm9kdWN0c19JbmRleC5hc3B4ZAIEDxYCHwIFFS9FU2FsZXMvU2VsbENhcmQuYXNweGQCBQ8WAh8CBRovU2VydmljZS9NYXN0ZXJPbmxpbmUuYXNweGQCBg8WAh8CBRIvTmV0QmFyL0luZGV4LmFzcHhkAgIPZBYGAgcPZBYCZg9kFgQCAQ8PFgIeBFRleHQFEjM2MDQyNTE5OTUwMzIzMTAzMGRkAgMPDxYCHwMFGTxmb250IGNvbG9yPSdyZWQnPjwvZm9udD5kZAIPD2QWAmYPZBYEAgMPD2QWAh4Hb25jbGljawXTAWlmICh0eXBlb2YoUGFnZV9DbGllbnRWYWxpZGF0ZSkgPT0gJ2Z1bmN0aW9uJykgeyBpZiAoUGFnZV9DbGllbnRWYWxpZGF0ZSgpID09IGZhbHNlKSB7IHJldHVybiBmYWxzZTsgfX07dGhpcy52YWx1ZSA9ICflj5HpgIHkuK0uLi4nO3RoaXMuZGlzYWJsZWQgPSB0cnVlO19fZG9Qb3N0QmFjaygnY3RsMDAkQ29udGVudFBsYWNlSG9sZGVyMSRidG5fVmFsaWRhdGUnLCcnKTtkAgcPFgIfAwVn6aqM6K+B56CB5bey5Y+R6YCB5Yiw5omL5py677yM5aaC5p6cMeWIhumSn+WGheaCqOayoeacieaUtuWIsOmqjOivgeegge+8jOivt+eCueWHu+aMiemSrumHjeaWsOmihuWPluOAgmQCEw8PFgIeB0VuYWJsZWRoZGRk
-----------------------------7da2ced220a6a--

 

     但是我们仔细看就会有意思了,首先在提交数据中的分隔符很容易被搞错。我们在提交数据中看到的“-----------------------------7da2ced220a6a”比HTTP头中指定的“---------------------------7da2ced220a6a”实际上要多出两个“-”。提交数据中的最后一个分隔符变成了“-----------------------------7da2ced220a6a--”。原来提交数据实际上的格式是这样的:

      假设HTTP头中我们指定的分割付是 ,那么提交数据的格式是:

/r/n-- /r/n <数据> /r/n-- /r/n <数据> /r/n-- /r/n <数据> ……/r/n-- —/r/n

     这里的 <数据> 就表示提交的表单数据,比如前面的:

Content-Disposition: form-data; name="ctl00$ContentPlaceHolder1$texName"

testName

     因此在写模拟提交程序的时候一定不要忘了,HTTP头中指定的分隔符,比你在提交数据中看到的分隔符应该是要少一个“--”的。否则提交数据就不会被正常获取。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
enctype="multipart/form-data"是HTML表单的一个属性,用于指定表单数据的编码类型。它表示表单数据包含多个部分,既包括文本数据,也包括文件等二进制数据。 需要注意的是,默认情况下,enctype的值是application/x-www-form-urlencoded,这种编码类型不能用于文件上传。只有在使用了multipart/form-data编码类型时,才能完整地传递文件数据。 使用enctype="multipart/form-data"可以模拟一个POST multipart/form-data类型的请求,这种请求格式与application/x-www-form-urlencoded完全不同。在这种编码类型需要在HTTP请求头设置一个分隔符来分隔各个部分的数据。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [form表单的enctype=“multipart/form-data“什么意思?](https://blog.csdn.net/lingxiyizhi_ljx/article/details/102514560)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [multipart form-data boundary 说明](https://blog.csdn.net/weixin_30547797/article/details/96177005)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值