2017-08-31 122 views
1

這是我在Python中需要的post請求的目標:POST請求文件python-requests

我得到了XML文件,url和身份驗證令牌。根據xml文件,我從服務器返回xml響應。

req = requests.post(url='http://abc123.com/index.php/plan/', \  
      headers={'auth-token': 'abCdeFgh'}, \ 
      data={'data': open('sample_plan.xml', 'rb')}) 

發佈請求狀態代碼是200,但在像「<error>invalid XML for request</error>」 xml響應錯誤。假設xml文件在我的發佈請求中填充了錯誤的參數。 但在另一個工具 - 郵遞員 - https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en?它的工作和成功與正確的XML響應。我在郵差:

  • 頁眉: 關鍵:驗證令牌:ABCDEFGH

  • 在身體:選擇 表單數據的選項.. 重點:數據:選擇sample_plan.xml文件..

目標爲參數(所有參數是強制性的)交請求的: 1.在頭 - 身份驗證令牌 2.在身體 - 與名稱/內容識別數據= XML文件

哪個參數應該我將發佈請求的文件放入?我已經嘗試幾乎所有 - 基於python-requests文檔...

感謝您的幫助!

回答

1

不知何故經過幾個小時的嘗試我明白了!

正確的參數是文件,並且必須有帶有3個參數的元組值的'數據'鍵。否則,它並沒有正常工作......

從我所用的請求文檔文件多編碼上傳參數http://docs.python-requests.org/en/master/api/關鍵「數據」,這我是3元組+ 值(敦促「文件名」,FileObj文件,「CONTENT_TYPE」)

因此,對於我的問題的答案是(也使用「與」關鍵字,因此文件的套房後,正確關閉完)

with open('sample_plan.xml', 'rb') as payload: 
    headers = {'auth-token': 'abCdeFgh'} 
    files = {'data': ('sample_plan.xml', payload, 'text/xml')} 
    req = requests.post(url='http://abc123.com/index.php/plan/', \ 
      headers=headers, files=files)