php - 使用 post 和 JWS 发送 JSON 数据

标签 php python http aiohttp

我正在使用 aiohttp(和 asyncio)向 PHP 应用程序发出 POST 请求。 当我在 python 上为 json 设置 header 时,PHP 应用程序没有收到任何 $_POST 数据(PHP 设置了 Content-Type: application/json header )。

php 端代码只返回 json_encode($_POST)

#!/usr/bin/env python3
import asyncio
import simplejson as json
from aiohttp import ClientSession
from aiohttp import Timeout

h = {'Content-Type': 'application/json'}
url = "https://url.php"
d = {'some': 'data'}
d = json.dumps(d)
# send JWS cookie
cookies = dict(sessionID='my-valid-jws')


async def send_post():
    with Timeout(5):
        async with ClientSession(cookies=cookies, headers=h) as session:
            async with session.post(url, data=d) as response:
                if (response.status == 200):
                    response = await response.json()
                    print(response)


loop = asyncio.get_event_loop()
loop.run_until_complete(send_post())

运行这个我得到:[]

当删除 header 参数和 json.dump(d) 我得到:{"some:"data"}

最佳答案

默认情况下,PHP 无法理解 application/json,您必须自己实现它,通常是通过删除以下内容:

if (isset($_SERVER["HTTP_CONTENT_TYPE"]) &&
    strncmp($_SERVER["HTTP_CONTENT_TYPE"], "application/json", strlen("application/json")) === 0)
{
    $_POST = json_decode(file_get_contents("php://input"), TRUE);
    if ($_POST === NULL) /* By default PHP never gives NULL in $_POST */
        $_POST = []; /* So let's not change old habits. */
}

在您的 PHP 代码的“公共(public)加载路径”中。

关于php - 使用 post 和 JWS 发送 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37305583/

相关文章:

php - (穷人的)产品推荐执行

php - 发送 "var_dump"到 FireBug 控制台

python - 确保两个正则表达式找不到相同的结果

java - 斯坦福核心Nlp无效最大堆大小错误

python - 如何使用 Python 监视屏幕 session ?

http - 如何在 anchor 中指定协议(protocol)并仍然使用相对路径?

php - 从 session 存储文件中读取 session 数据

java - 如何在 Java 中解码 http POST 数据?

html - url/src/href 属性中的两个正斜杠

php - 函数工作不一致