отправлять данные JSON с помощью post и JWS

Я использую aiohttp (и asyncio), чтобы сделать запрос POST к PHP-приложению.
Когда я устанавливаю заголовок для json на python, PHP-приложение не получает никаких данных $ _POST (PHP имеет Content-Type: application/json заголовок установлен).

Код стороны 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())

Запустив это я получил: []

При удалении параметра заголовков и json.dump(d) Я получил: {"some:"data"}

1

Решение

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.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]