簡體   English   中英

嘗試使用python請求模塊進行發布請求時出現HTTP 500錯誤

[英]http 500 error when attempting to make a post request with python requests module

我有一個python(python 2.7)腳本,它使用請求模塊向我在本地主機上運行的Web應用程序發布信息。 需要填寫的表單具有用於數據的區域和用於文件上傳的區域。

import requests
root = "http://localhost/qatrack/"
test_list_url =root+"qa/utc/perform/17/day=next&next=/qatrack/qa/unit/7/"
s = requests.Session()
s.get(login_url)
token = s.cookies['csrftoken']
login_data = {
    'username':'user',
    'password':'pass',
    'csrfmiddlewaretoken': token
}
login_resp = s.post(login_url, data=login_data)
data1=open('C:/deploy/qatrackplus/python/imgs/test1.png','rb')
data2=open('C:/deploy/qatrackplus/python/imgs/test2.png','rb')
test_data = {
    'csrfmiddlewaretoken': token,
    "work_started":timestr,
    "work_completed":timestr,
    "status":"1",
    "form-TOTAL_FORMS":"4",
    "form-INITIAL_FORMS":"4",
    "form-MAX_NUM_FORMS":"1000",
    "form-0-value":"5"
}
f={
    "form-1-string_value":data1,
    "form-2-string_value":data2
}
resp = s.post(test_list_url, data=test_data, files=f)

響應給出了500個錯誤代碼,當我將輸入內容放入.html文件時,它將說Web應用程序的一個腳本中存在屬性錯誤。 如果我為沒有需要上載的文件上載的表單運行腳本,則不會得到此消息。

我認為您的問題出在您如何將data1data2傳遞給表單。 您正在對圖像文件調用open() ,但這本身並不能提供任何數據。 它為您提供了一個文件讀取器對象。 要從中獲取數據,您需要使用read()類的東西來從流中實際獲取數據,以便繼續傳遞。

作為對此的更新,我已經找到了解決方案。 它正在尋找文件名,但是基於Web應用程序的上傳機制,它正在文件夾C:/ deploy /.../ media / uploads / tmp /中尋找文件名。 保存要上傳到那里的文件后,在發布請求中刪除files = f參數,並提交test_data表單為:

test_data = {
  'csrfmiddlewaretoken': token,
  "work_started":timestr,
  "work_completed":timestr,
  "status":"1",
  "form-TOTAL_FORMS":"3",
  "form-INITIAL_FORMS":"3",
  "form-MAX_NUM_FORMS":"1000",
  "form-0-value":"5"
  "form-1-string_value":test1.png #saved in C:/deploy/.../media/uploads/tmp/
  "form-2-string_value":test2.png
}
 resp = s.post(test_list_url, data=test_data)

根據需要上傳文件。 感謝您的所有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM