2014-01-13 60 views
1

我想在數據前面安排文件。如果我嘗試傳統方式,數據出現在文件的前面。更具體地說,我想myfile出現在form_value之前。如何使用請求發佈多部分/表單數據來安排數據和文件的順序?

form_value={'exp':'python', 'ptext':'text', 'board':'Pictures'} 
myfile = {'up': ('aa.png', open('aa.png', 'rb'), 'image/png')} 
r = requests.post(url, files=myfile, data=form_value, cookies=cookie) 

結果

Content-Type: multipart/form-data; boundary=170e4a5db6d74d5fbb384dfd8f2d33ce 

--170e4a5db6d74d5fbb384dfd8f2d33ce 
Content-Disposition: form-data; name="ptext" 

text 
--170e4a5db6d74d5fbb384dfd8f2d33ce 
Content-Disposition: form-data; name="board" 

Pictures 
--170e4a5db6d74d5fbb384dfd8f2d33ce 
Content-Disposition: form-data; name="exp" 

python 
--170e4a5db6d74d5fbb384dfd8f2d33ce 
Content-Disposition: form-data; name="up"; filename="aa.png" 
Content-Type: image/png 

回答

3

requests始終將filesdata後,但您可以添加您的data參數到files說法代替。

然後,您必須使用具有鍵值元組的列表來代替字典來保存順序。而你需要提供的文件名和內容類型條目None確保requests不會嘗試給你錯誤的標題:

files = [ 
    ('up', ('aa.png', open('aa.png', 'rb'), 'image/png')), 
    ('exp', (None, 'python', None)), 
    ('ptext', (None, 'text', None)), 
    ('board', (None, 'Pictures', None)), 
] 

r = requests.post(url, files=files, cookies=cookie) 

這將產生:

Content-Type: multipart/form-data; boundary=6f9d948e26f140a289a9e8297c332a91 

--0ca5f18576514b069c33bc436ce6e2cd 
Content-Disposition: form-data; name="up"; filename="aa.png" 
Content-Type: image/png 

[ .. image data .. ] 

--0ca5f18576514b069c33bc436ce6e2cd 
Content-Disposition: form-data; name="exp" 

python 
--0ca5f18576514b069c33bc436ce6e2cd 
Content-Disposition: form-data; name="ptext" 

text 
--0ca5f18576514b069c33bc436ce6e2cd 
Content-Disposition: form-data; name="board" 

Pictures 
--0ca5f18576514b069c33bc436ce6e2cd-- 
相關問題