我从Python Web应用程序服务器请求来自Tomcat Webserice的pdf二进制内容。
我们在Python中实现了2次这样的重试。偶尔我们得到一个HTTP 500响应。 此问题正在调查中,但很可能是与资源不足相关的环境问题,例如最大数量:进程已达到等等。在下一次重试中,我们经常会收到HTTP 200部分blob内容(即PDF格式的EOF标记)。怎么可能?
此重试逻辑中是否存在任何缺陷? HTTP 200响应如何包含不完整的数据超出了我的理解。首先发送HTTP 200,然后发送真实数据(这意味着服务器在发送HTTP 200后可能会死机)?唯一的另一种解释是服务器正在发送整个内容,但生成数据的程序正在发送不完整的数据,因为某些资源问题可能也会导致HTTP 500.
# There is a unique id as well to make it new request. (retries is 2 by default)
while retries:
try:
req = urllib2.Request(url, data=input_html)
req.add_header('Accept', 'application/pdf')
req.add_header('Content-Type', 'text/html')
handle = urllib2.urlopen(req)
pdf_blob = handle.read()
except:
log(traceback)
retries = retries - 1
if not retries:
raise
架构如下:
网络应用程序 - >调用Tomcat - >获取PDF - >商店到DB。