![](/img/trans.png)
[英]What is the difference between HTTP Post URL with /post and without using Python requests module?
[英]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应用程序的一个脚本中存在属性错误。 如果我为没有需要上载的文件上载的表单运行脚本,则不会得到此消息。
我认为您的问题出在您如何将data1
和data2
传递给表单。 您正在对图像文件调用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.