【问题标题】:POST request payload in python not reaching PHP serverpython中的POST请求有效负载未到达PHP服务器
【发布时间】:2022-01-04 09:47:00
【问题描述】:

我正在尝试在 python 中将带有会话请求的 JSON 有效负载发送到 PHP 服务器。 会话本身已建立,并且服务器接受了 cookie,但是当我打印出 $_POST 时,它返回一个空数组。 看起来负载没有随请求一起发送,或者 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]

【问题讨论】:

  • 错字:$POST['script'] 应该是$_POST['script']

标签: python php session python-requests


【解决方案1】:

根据此处的文档:https://2.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests,为了发布 JSON 数据,您应该使用以下任一方式:

import json
...
response = s.post(url, data = json.dumps(payload), verify = False)

...
response = s.post(url, json = payload, verify = False)

注意,如果datafiles 被传递,json 参数将被忽略。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2017-10-17
    • 2015-09-04
    • 2013-01-09
    相关资源
    最近更新 更多