httpチャンク転送エンコーディングの処理に問題があります。
私が使用しているもの:
- apache。
- mod_wsgiプラグイン。
- django。
djangoは、content-lengthヘッダーフィールドを持つ通常のhttpリクエストのみを処理できますが、TE(Transfer-Encoding)、チャンク、またはgzipの処理に関しては、空の結果を返します。
私は2つのアプローチを考えています:
- django.wsgipythonファイルに変更を加える
- ミドルウェアのPythonファイルをdjangoに追加して、チャンク化されたhttpリクエストをインターセプトし、content-lengthヘッダーフィールドを持つrequelar httpリクエストに変換してから、djangoに渡します。
誰でも上記の2つのオプションのいずれかを手伝うことができます(もちろん、より多くのオプションが大歓迎です)
ありがとう!
これは、グラハムの最初の回答の後の私の質問の拡張です。
まず第一に、あなたの迅速な対応に感謝します。使用しているクライアントはAxisです。これは、当社と通信する他社のシステムの一部です。私はWSGIChunkedRequest On
設定しました。また、次のようにwsgiラッパーにいくつかの変更を加えました。
def application(environ, start_response):
if environ.get("mod_wsgi.input_chunked") == "1":
stream = environ["wsgi.input"]
print stream
print 'type: ', type(stream)
length = 0
for byte in stream:
length+=1
#print length
environ["CONTENT_LENGTH"] = len(stream.read(length))
django_application = get_wsgi_application()
return django_application(environ, start_response)
しかし、それは私にそれらのエラーを与えます(apacheのerror.logファイルから抽出されました):
[Sat Aug 25 17:26:07 2012] [error] <mod_wsgi.Input object at 0xb6c35390>
[Sat Aug 25 17:26:07 2012] [error] type: <type 'mod_wsgi.Input'>
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] mod_wsgi (pid=27210): Exception occurred processing WSGI script '/..../wsgi.py'.
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] Traceback (most recent call last):
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] File "/..../wsgi.py", line 57, in application
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] for byte in stream:
[Sat Aug 25 17:26:08 2012] [error] [client xxxxxxxxxxxxx] IOError: request data read error
私は何を間違っているのですか?!