原以為curl 模擬post file跟post string類似,-d參數一加 ,header一加就完了,這次遇到個問題,卻怎么都搞不定。
curl模擬post提交
與客戶端定的協議是:
| Header |
Content-Type: multipart/form-data; |
| Body |
Content-Disposition: form-data; name="file"; filename="xx.jpg" Content-Type: image/jpeg |
使用curl時,想模擬客戶端,結果使用--form 參數傳遞body時報錯:
IllegalArgumentException: Error parsing content disposition: form-data; name="----7db372eb000e2\r\n Content-Disposition:"form-data";name"
搜了一下post的數據格式,發現需要加boundary,於是加上boundary做post
使用-d參數傳遞body時報錯 :
curl -H "Content-type:multipart/form-data;boundary=--7db372eb000e2" -d '----7db372eb000e2\r\n Content-Disposition:"form-data";name="file";filename="@xx.jpg";----7db372eb000e2--\r\n' "http://192.168.50.0:8080/res/v2/upload/pic/photo"
org.jvnet.mimepull.MIMEParsingException: Missing start boundary]
使用網上找的一段java.net.HttpURLConnection (http://blog.csdn.net/skyer_lei/article/details/6106709)代碼 post form也報錯
最終發現 使用-F參數 上傳文件名即可, 不需要寫Content-Disposition 之類信息
curl -S -H "Cookie:uss=AAFxAAgqIx3k9bmQMAAAAAADYnr561" -H "Content-type:multipart/form-data" -F file=@/home/work/mfs/storage/lv/public/photo/37/f8/b7510442817b16138d8883d1b392.jpg "http://192.168.50.0:8080/res/v2/upload/pic/photo"
應該是curl會自動給加上,沒搞懂客戶端模擬的請求為什么總是出錯。
找到一個可用的HttpURLConnection test,需要研究下為什么上邊那個有問題
http://lapulande.iteye.com/blog/719581
