解決したいこと
Python Requestsモジュールにて POST送信し、PHPでPOSTを受け取ろうとしております。
PHP側からレスポンスは返って来てはいるのですが、POSTしたデータがなく、いろいろ調べましたが、解決できなく困り果ててます。
python側
import json import requests json_data = { 'datas': 'data' } TO_URL = "http://hoge.com/hoge.php/" headers={'Content-Type': 'application/json'} response = requests.post( TO_URL, data=json.dumps(json_data),headers=headers) print(response.text)
PHP側
$raw_data = file_get_contents("php://input"); $json = json_decode($raw_data, true); print_r($json);
自分で試したこと
requests.post( TO_URL, param=json_data)
にてPHP側で$_GETでJSONを受け取ることはできましたが、やりたいことはPOST(バイト数が多いデータもあるため)なので根本的な解決に至っていません。
よろしくお願いいたします。
HTTP でいうところの "POST" つまり、form の method=POST を実現したいと考えてるんですよね?
はい。
こちらの記事を参考にしました。
https://sy-base.com/myrobotics/python/python-requests-get-post/
$raw_data にはなにか来てますか? あと response.status_code も確認してみましょう。
ご回答ありがとうございます。
自分でも色々試したのですが、環境が問題かなと言うことにたどり着きました。
php側はXSERVERなのですが、そちらでは$raw_dataは空。
試しに他で立ち上げたサーバーに同じPHPを置いて渡してみたところ、$raw_dataにしっかりデータが入っていました。
php.ini 等で受け取れるようにする設定があるのでしょうか?
それともXSERVERが外部からのPOSTは受け付けない仕様なのかな?とも思ってサポートに問い合わせてみましたが、XSERVERで外部からのPOST制限等はかけていないようです。
response.status_code にエラーが返ってたりしないスかね?
すいません見落としていました。
response.status_codeは ずっと200なんです。
自分なりに検証してみてるのですが、
XSERVERのほうでで送信されたヘッダーを確認してみると、
Accept: */*
User-Agent: python-requests/2.25.1
Connection: close
X-File-Type: normal
X-Ua-Device: pc
X-Failure-Cache-Time: 0
X-Accel-Expires: 60
X-Wp-Access: 0
X-Php-Fpm-Version: 74
X-Server-Address: 0.0.0.0 //変更してます
X-Real-Ip: 0.0.0.0 //変更してます
X-Forwarded-Ssl: on
X-Forwarded-Port: 443
X-Forwarded-Host: hogehoge.com
X-Forwarded-Proto: https
X-Forwarded-For: 0.0.0.0 //変更してます
Host: hogehoge.com
他のレンタルサーバーで構築した環境の方だと
Host: 0.0.0.0 //変更してます
User-Agent: python-requests/2.25.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 17
と表示されます。(おなじPHPファイル)
なんか XSERVER の方はサーバーから切られてるっぽい?
https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Connection
ご回答ありがとうございました!
XSERVER側に問い合わせて、何もしてないのですが、上記コードのままデータを受け渡すことができるようになってました。
server側の何かしらの原因だったのかもしれません。謎です。。。。
こちらでは何もしてませんが、解決できたのでクローズさせていただきます。ありがとうございました!
回答1件
あなたの回答
tips
プレビュー