繁体   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