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

其实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头中指定的分隔符,比你在提交数据中看到的分隔符应该是要少一个“--”的。否则提交数据就不会被正常获取。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值