Python请求返回500

Python请求返回500,python,amazon-s3,python-requests,Python,Amazon S3,Python Requests,我正在写一个程序,将发布一个文件到一个网站,这是让我通过几个步骤得到正确上传的文件。在第一步中,我执行了一个简单的POST,提醒站点将上载一个文件,并返回一个指向AmazonS3 bucket的URL,以及一些其他响应内容。下一步是将文件发布到第一步中返回的URL,这就是问题所在。我的代码如下: import requests import os from collections import OrderedDict etlmig = <token> auth = {'Author

我正在写一个程序,将发布一个文件到一个网站,这是让我通过几个步骤得到正确上传的文件。在第一步中,我执行了一个简单的POST,提醒站点将上载一个文件,并返回一个指向AmazonS3 bucket的URL,以及一些其他响应内容。下一步是将文件发布到第一步中返回的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)
导入请求
导入操作系统
从集合导入订单
etlmig=
auth={'Authorization':'Bearer'+etlmig}
路径=
file=os.listdir(路径)[0]
stats=str(os.stat(path+'\\'+文件)[6])
params1={'name':文件,'size':stats}
r1=请求。post('https://......,标题=auth,数据=params1)
打印r1.status_代码#返回200
content1=r1.json()
contentlist1=content1.values()
url=str(contentlist1[1])
contentlist2=列表(contentlist1[2])
contentlist3=contentlist1[2]。值()
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
课程={'file':打开(路径+'\\'+文件'rb')}
r2=requests.post(url,数据=m,文件=course)
从这里开始,代码等待约45秒,然后
r2。status\u code
返回500错误。我不确定如何继续,因为500错误是一个一般性错误,它不能为我找到正确的方向


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

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

r2 = requests.post(url, data=m, files=course, allow_redirects=False)
问题解决了