requestを取得するとbodyが空になる

1,132 views
Skip to first unread message

3644

unread,
Dec 26, 2017, 1:11:18 AM12/26/17
to django-ja

初めてご質問させていただきます。

requestを受信し、views.pyの中でrequest.bodyするとbodyがb''となってしまいます。

tcpdumpでは、bodyに<?xml version.....と適切に入っており、Content-Lengthに1377
と設定されています。
そのrequestを、views.pyにてrequest.bodyで取得すると、前述のとおり、
b''となり、request.METAのCONTENT_LENGTH : ''となっています。

確認すべき項目、設定などがありましたらご教示ください。

バージョン
python  = 3.6.2
Django = 2.0
uWsgi  = 2.0.15


tokibito

unread,
Jan 4, 2018, 8:11:52 AM1/4/18
to django-ja
岡野です。

該当の現象は確認できませんでしたが、uwsgiを使った際にそのような動きになることがあるという話を聞いたことがあります。
リクエスト内容はREST(XML)?でしょうか。
可能であればuwsgi以外のアプリケーションサーバー(gunicornなど)も試してみてください。


2017年12月26日火曜日 15時11分18秒 UTC+9 3644:

toritoritorina

unread,
Jan 9, 2018, 4:23:41 AM1/9/18
to djan...@googlegroups.com
確認ですが、「レスポンス」のbodyではなく、「リクエスト」のbodyでしょうか。
requestオブジェクトのbody部分は、基本的にPOSTでのデータ送信時にしか値が入りません。
GETの場合であれば、request.body がb''となるのは正常な動作です。

2017年12月26日 15:02 3644 <sato...@gmail.com>:

--
--
----------------- http://djangoproject.jp/ -----------------
You received this message because you are subscribed to the Google Groups "django-ja" group.
To post to this group, send email to djan...@googlegroups.com
To unsubscribe from this group, send email to django-ja-unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/django-ja
---
このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+unsubscribe@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。



--
>>> name
滝澤 成人(タキザワ ナリト)
>>> phone
090-7513-4336

3644

unread,
Jan 9, 2018, 4:23:41 AM1/9/18
to django-ja


岡野様

ご教示ありがとうございます。

リクエスト内容はREST(XML)でした。
gunicornで環境構築してみたいと思います。

当方でも継続して調査しておりましたが、
javaからの要求→NG
pythonからの要求→OK
ブラウザからの要求→OK
chrome app (Advanced Rest Client)→OK
という状態であり、現状Java(jersey)からの要求のみ失敗している状態です。

gunicornで検証しましたら、再度報告させていただきます。


2018年1月4日木曜日 22時11分52秒 UTC+9 tokibito:

3644

unread,
Jan 12, 2018, 3:47:22 AM1/12/18
to django-ja

滝澤様

宜しくお願い致します。

「リクエスト」のbodyになります。
'REQUEST_METHOD': 'POST'を確認しておりますので、POSTでのデータ送信と認識しています。

その他、確認すべき項目、認識相違などあればご指摘いただければ幸甚です。

2018年1月9日火曜日 18時23分41秒 UTC+9 toritoritorina:
確認ですが、「レスポンス」のbodyではなく、「リクエスト」のbodyでしょうか。
requestオブジェクトのbody部分は、基本的にPOSTでのデータ送信時にしか値が入りません。
GETの場合であれば、request.body がb''となるのは正常な動作です。
2017年12月26日 15:02 3644 <sato...@gmail.com>:

初めてご質問させていただきます。

requestを受信し、views.pyの中でrequest.bodyするとbodyがb''となってしまいます。

tcpdumpでは、bodyに<?xml version.....と適切に入っており、Content-Lengthに1377
と設定されています。
そのrequestを、views.pyにてrequest.bodyで取得すると、前述のとおり、
b''となり、request.METAのCONTENT_LENGTH : ''となっています。

確認すべき項目、設定などがありましたらご教示ください。

バージョン
python  = 3.6.2
Django = 2.0
uWsgi  = 2.0.15


--
--
----------------- http://djangoproject.jp/ -----------------
You received this message because you are subscribed to the Google Groups "django-ja" group.
To post to this group, send email to djan...@googlegroups.com
To unsubscribe from this group, send email to django-ja-...@googlegroups.com

For more options, visit this group at http://groups.google.com/group/django-ja
---
このメールは Google グループのグループ「django-ja」に登録しているユーザーに送られています。
このグループから退会し、グループからのメールの配信を停止するには django-ja+...@googlegroups.com にメールを送信してください。
その他のオプションについては https://groups.google.com/d/optout にアクセスしてください。

3644

unread,
Jan 12, 2018, 4:02:16 AM1/12/18
to django-ja

岡野様

gunicornで確認いたしました。

結論から申せば、
・pythonからのリクエストはリクエストの受付がされ、printでボディを出力した際に、期待した値が出力されました。
・javaからのリクエストはリクエストの受付自体が認識されませんでした。

ご参考(gunicorn)
pythonからのリクエストでは、下記のprint(env['wsgi.input'].read())で期待したbodyが取得できました。

def application(env, start_response):

    print(env)
    print(env['wsgi.input'].read())

    start_response('200 OK', [('Content-type', 'text/plain; charset=utf-8')])
    return [b'Hello World']

起動パラメータ
gunicorn -w 1 -b 0.0.0.0:8000 hello:application


2018年1月9日火曜日 18時23分41秒 UTC+9 3644:

MURAOKA Yusuke

unread,
Jan 12, 2018, 4:14:08 AM1/12/18
to djan...@googlegroups.com
村岡です。

基本的な確認なのですが、そのJava(Jersey)からのHTTPリクエストは正しい構造になっていますでしょうか?
リクエストヘッダやボディの構成、TCPレベルでのパケットの分割具合など。

現象としては再現されているようなので、もし可能ならそのJavaのプログラムからuWSGIへダミーのデータを送信して現象が再現したパケットキャプチャを共有していただけたらもう少し具体的なアドバイスができるかもしれません。

2018年1月12日(金) 18:02 3644 <sato...@gmail.com>:

3644

unread,
Jan 15, 2018, 3:24:49 AM1/15/18
to django-ja

岡村様

HTTPリクエストは正しい構造になっています。
実は、nginxからdjangoにリバースプロキシすることでrequest.bodyがとれることを
確認しております。(当然ですが、javaプログラムは変更しておりません。)
とはいえ、根本的な解決にはなっておりませんので、可能であれば原因追及に
努めたいと考えております。

パケットキャプチャはtcpdumpで宜しいでしょうか。
オプションの指定がございましたら、ご教示頂けないでしょうか


2018年1月12日金曜日 18時14分08秒 UTC+9 MURAOKA Yusuke:

MURAOKA Yusuke

unread,
Jan 23, 2018, 8:59:11 AM1/23/18
to djan...@googlegroups.com
村岡です。

HTTPリクエストのパーサーによって挙動が変わっているように見うけられるため、(uwsgiやgunicornでのみNG)
RFCどおりのValidなHTTPリクエストかどうかという質問でした。

一般的にサーバは不正確なリクエストに対しても可能であれば動作するように寛容な実装がされているので
もしかしたらそこの谷間にはまったパターンかなと推測したまでです。

正しい構造になっているならばパケットキャプチャは不要です。



2018年1月15日 15:57 3644 <sato...@gmail.com>:
Reply all
Reply to author
Forward
0 new messages