2013-10-28 141 views
2

我做的使用請求模塊的簡單POST請求,並與編碼測試它反對httpbinPython'請求'模塊和編碼?

import requests 

url  = 'http://httpbin.org/post' 
params = {'apikey':'666666'} 
sample = {'sample': open('test.bin', 'r')} 

response = requests.post(url, files=sample, params=params, verify=False) 
report_info = response.json() 
print report_info 

我有一個問題。它沒有使用application/octet-stream,所以編碼不正確。從標題,我看到:

{ 
    u'origin': u'xxxx, xxxxxx', 
    u'files': { 
       u'sample': u'data:None;base64,qANQR1DBw.......... 

所以,我得到的data:None代替data:application/octet-stream當我嘗試用curl。文件大小和編碼不正確。

我該如何強制或檢查它是否使用application/octet-stream?從http://www.python-requests.org/en/latest/user/quickstart/#custom-headers

>>> import json 
>>> url = 'https://api.github.com/some/endpoint' 
>>> payload = {'some': 'data'} 
>>> headers = {'content-type': 'application/json'} 

>>> r = requests.post(url, data=json.dumps(payload), headers=headers) 

採取

回答

1

樣本您可能要改變headers

headers = {'content-type': 'application/octet-stream'} 
response = requests.post(url, files=sample, params=params, verify=False, 
      headers = headers) 
+0

感謝@thefourtheye您的建議,同時,做正確的文本添加到標題,這不是不改變編碼。該文件仍然編碼不正確。就好像python-requests沒有正確識別文件類型,所以它不能正確編碼,也不會正確添加'application/octet-stream'。 – user2927191

+0

使用python請求:''Content-Type':'multipart/form-data;邊界= 9e13cb8a968a49c2b7c8781e701d2c13''。使用curl:'Content-Type「:」multipart/form-data;邊界= ------------------------ d0f3782a702ecbd9'。爲什麼不同? – user2927191

+0

邊界字符串是僞隨機的;只要您在相同的HTTP請求中保持一致,這不是問題。 – TML