私の現在のテストpythonスクリプトは次のようなことをします:
#!/usr/bin/env python
import sys
data = sys.stdin.read()
myjson = json.loads(data)
問題は、これが機能した場合でも、おそらく read() でブロックされているように見える場合があることです。
他のいくつかの理由で、CGI スクリプトに tomcat を使用することを余儀なくされていますが、これが問題になるかどうかはわかりません。
読み取る前にコンテンツの長さを確認し、によって読み取られるバイト数を制限する必要がありますsys.stdin.read()
。を参照してくださいcgi.parse_header()
。
アップデート:
着信データは、Web サーバーによって設定された環境を介して取得されます。でアクセスできますos.environ
。
import os
from cgi import parse_header
os.environ['Content-Type'] = 'text/html; charset=utf-8'
parse_header(os.environ['Content-Type'])
# returns ('text/html', {'charset': 'utf-8'})
したがって、CGI スクリプトでは (大まかに) 以下が必要です。
import os, cgi, sys
cl, _ = parse_header(os.environ['Content-Length'])
data = sys.stdin.read(int(cl))