0
我正在使用自動化腳本(我正在使用它來自動化某些視頻的轉換過程)。在此視頻轉換後的腳本中,我打電話給我的Web服務來更新數據庫中的剪輯狀態,並在POST請求中向Web服務發送剪輯列表。但問題是這個請求失敗,並在服務器端導致500內部服務器錯誤。從python應用程序到python webservice發佈多級字典
這裏是我使用的調用與樣本數據的Web服務,我試圖與代碼:
post_body = {
'clips': [
{
'clip_id': 17555,
'db_url': '/720p/14555.mp4'
}
]
}
params = urlencode(post_body)
url = str(self.update_url)
req = urllib2.Request(url, params)
response = urllib2.urlopen(req)
res = response.read()
print res
,這裏是我的web服務的代碼:
def update_conversion_clips(request):
print "Web service is called"
try:
clips = request.POST.get('clips', None)
print clips
return HttpResponse(True)
except:
return HttpResponse(False)
即使第一打印語句不執行。
這裏是應用端的錯誤堆棧跟蹤:
Traceback (most recent call last):
File "conversion_script.py", line 48, in <module>
conversion_script.run()
File "conversion_script.py", line 44, in run
self.clips.update_clips_info(None)
File "/home/abc/video_experiments/conversion/clips_manager.py", line 59, in update_clips_info
response = urllib2.urlopen(req)
File "/usr/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/lib/python2.7/urllib2.py", line 406, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 519, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 444, in error
return self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 378, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 527, in http_error_default
raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
urllib2.HTTPError: HTTP Error 500: INTERNAL SERVER ERROR
,這是服務器端的錯誤:
[20/Feb/2014 04:13:15] "POST /update_conversion_clips HTTP/1.1" 500 68733
根據我的研究,這是發生由於多級字典,我發送POST。但我找不到解決它的任何解決方案。
新代碼發送數據作爲JSON(仍然不工作):
values = dict()
values['clips'] = [
{
'clip_id': 17555,
'db_url': '/720p/14555.mp4'
}
]
req = urllib2.Request(self.update_url)
req.add_header('Content-Type', 'application/json')
response = urllib2.urlopen(req, json.dumps(values))
res = response.read()
print res
,並在服務器端:
try:
data = json.loads(request.body)
clips = data['clips']
except:
print "Exception occured!"
HttpResponse(True)
thanx您的回覆!我試着按照你的建議使用新代碼,但它仍然給我提供了同樣的錯誤,即500內部服務器錯誤!我還在編輯中添加了新代碼。 –
請注意,請不要捕獲所有異常,只需打印「發生異常」。這完全適得其反。讓Python向您展示錯誤,然後我們將知道實際發生了什麼問題以及如何解決問題。 –
我嘗試沒有嘗試趕上,但它並沒有顯示任何異常在服務器端! 「[24/Feb/2014 06:05:06]」POST/content/update_conversion_clips HTTP/1.1「500 68889 」我認爲在我看來沒有錯誤,因爲甚至沒有第一個代碼語句的視圖被執行。 –