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)

请注意,如果传递 datafiles,则忽略 json 参数。

在请求中使用json参数会将header中的Content-Type更改为application/json