POST python 中的请求负载未到达 PHP 服务器
POST request payload in python not reaching PHP server
我正在尝试将 python 中带有会话请求的 JSON 负载发送到 PHP 服务器。
会话本身已建立并且服务器接受了 cookie,但是当我打印出 $_POST
时,它 returns 是一个空数组。
负载似乎没有随请求一起发送,或者 PHP 无法识别它。
客户端 - Python:
import json
import requests
url = 'https://prov.is.st.com/eventpost.php'
payload = {
'script': 'pyt.sh',
'status': 'Success'
}
s = requests.Session()
s.cookies.set('provisioning', cookie, domain='prov.is.st.com')
headers = {
'Content-Type': 'application/json'
}
s.headers.update(headers)
response = s.post(url, data=payload, verify=False)
print(response.text)
服务器端 - PHP:
<?php
print_r($_POST);
if(isset($_POST['status'])){
$status = $_POST['status'];
}
else{
$status=0;
}
if (isset($_POST['script'])) {
$script=$_POST['script'];
} else {
$script="unknown";
}
if (isset($_COOKIE['provisioning'])) {
$cookie=$_COOKIE['provisioning'];
print "OK: Message accepted: [$status][$script]\n";
}
else {
print "ERROR: NO cookie provided.\n";
}
输出
Array
(
)
OK: Message accepted: [0][unknown]
根据此处的文档:https://2.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests,为了 post JSON 数据,您应该使用以下任一方式:
import json
...
response = s.post(url, data = json.dumps(payload), verify = False)
或
...
response = s.post(url, json = payload, verify = False)
请注意,如果传递 data
或 files
,则忽略 json
参数。
在请求中使用json
参数会将header中的Content-Type
更改为application/json
。
我正在尝试将 python 中带有会话请求的 JSON 负载发送到 PHP 服务器。
会话本身已建立并且服务器接受了 cookie,但是当我打印出 $_POST
时,它 returns 是一个空数组。
负载似乎没有随请求一起发送,或者 PHP 无法识别它。
客户端 - Python:
import json
import requests
url = 'https://prov.is.st.com/eventpost.php'
payload = {
'script': 'pyt.sh',
'status': 'Success'
}
s = requests.Session()
s.cookies.set('provisioning', cookie, domain='prov.is.st.com')
headers = {
'Content-Type': 'application/json'
}
s.headers.update(headers)
response = s.post(url, data=payload, verify=False)
print(response.text)
服务器端 - PHP:
<?php
print_r($_POST);
if(isset($_POST['status'])){
$status = $_POST['status'];
}
else{
$status=0;
}
if (isset($_POST['script'])) {
$script=$_POST['script'];
} else {
$script="unknown";
}
if (isset($_COOKIE['provisioning'])) {
$cookie=$_COOKIE['provisioning'];
print "OK: Message accepted: [$status][$script]\n";
}
else {
print "ERROR: NO cookie provided.\n";
}
输出
Array
(
)
OK: Message accepted: [0][unknown]
根据此处的文档:https://2.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests,为了 post JSON 数据,您应该使用以下任一方式:
import json
...
response = s.post(url, data = json.dumps(payload), verify = False)
或
...
response = s.post(url, json = payload, verify = False)
请注意,如果传递 data
或 files
,则忽略 json
参数。
在请求中使用json
参数会将header中的Content-Type
更改为application/json
。