Python Web アプリケーション サーバーから Tomcat Webserice に pdf バイナリ コンテンツを要求しています。
このような 2 回のリトライを Python で実装しました。ときどき HTTP 500 レスポンスを受け取ります。この問題は調査中ですが、最大数に達したプロセスなどのリソース不足に関連する環境の問題である可能性が非常に高いです。次の再試行では、多くの場合、部分的な 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
アーキテクチャは次のとおりです。
Web アプリケーション -> Tomcat を呼び出し -> PDF を取得 -> DB に保存。