2015-12-08 86 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) 

該問題已解決。