2015-12-08 82 views
-1

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

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内容解析为最终以更快的方式使用的格式有任何建议,请让我知道!

回答

0

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

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

该问题已解决。