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

来源:互联网 发布:hadoop的端口号 编辑:程序博客网 时间:2024/05/17 12:03

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

原创粉丝点击