Python请求返回500

时间:2015-12-08 01:02:43

标签: python amazon-s3 python-requests

我正在编写一个程序,将文件发布到一个网站,让我通过几个步骤来正确上传文件。在第一步中,我执行一个简单的POST,警告网站将上传文件并将URL返回到Amazon S3存储桶以及更多响应内容。下一步是将文件POST到第一步中返回的URL,这就是事情中断的地方。我的代码如下:

import requests
import os
from collections import OrderedDict

etlmig = <token>
auth = {'Authorization': 'Bearer ' + etlmig}
path = <path>
file = os.listdir(path)[0]
stats = str(os.stat(path + '\\' + file)[6])

params1 = {'name': file, 'size': stats}
r1 = requests.post('https://......', headers=auth, data=params1)
print r1.status_code #This returns a 200
content1 = r1.json()
contentlist1 = content1.values()

url = str(contentlist1[1])

contentlist2 = list(contentlist1[2])
contentlist3 = contentlist1[2].values()

aws1 = str(contentlist2[0])
aws2 = str(contentlist3[0])
suc1 = str(contentlist2[1])
suc2 = str(contentlist3[1])
acl1 = str(contentlist2[2])
acl2 = str(contentlist3[2])
key1 = str(contentlist2[3])
key2 = str(contentlist3[3])
sig1 = str(contentlist2[4])
sig2 = str(contentlist3[4])
pol1 = str(contentlist2[5])
pol2 = str(contentlist3[5])
fil1 = str(contentlist2[6])
fil2 = str(contentlist3[6])

m = OrderedDict()
m[key1] = key2
m[acl1] = acl2
m[fil1] = fil2
m[aws1] = aws2
m[pol1] = pol2
m[sig1] = sig2
m[suc1] = suc2

course = {'file': open(path + '\\' + file, 'rb')}

r2 = requests.post(url, data=m, files=course)

此处代码等待约45秒,然后r2.status_code返回500错误。我不确定如何继续,因为500错误是一般错误,并没有指出我找到错误的方向。

此外,如果有人对如何将JSON内容解析为最终以更快的方式使用的格式提出任何建议,请告诉我们!

1 个答案:

答案 0 :(得分:0)

事实证明,问题在于r2的响应标头中包含一个URL。请求尝试遵循此URL,但没有正确的端点或授权,因此返回500错误。将r2更改为

r2 = requests.post(url, data=m, files=course, allow_redirects=False)

问题已经解决。