0

我正在从 Python Web 应用程序服务器的 Tomcat Webserice 请求 pdf 二进制内容。

我们已经在 Python 中实现了 2 次这样的重试。有时我们会收到一个 HTTP 500 响应。正在调查此问题,但很可能是与资源不足有关的环境问题,例如达到的最大进程数等。在下一次重试中,通常情况下,我们会得到一个带有部分 blob 内容的 HTTP 200(即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

架构如下:

Web 应用程序 -> 调用 Tomcat -> 获取 PDF -> 存储到数据库。

4

0 回答 0