Мой php файл выглядит следующим образом:
<?php
var_dump($_POST);
Python код:
>>> import requests
>>> data = {'test1': 'ok', 'test2': ['Ok','or','wrong']}
>>> print(requests.post('http://localhost:8000/test.php', data=data).text)
array(2) {
["test1"]=>
string(2) "ok"
["test2"]=>
string(5) "wrong"
}
>>> data = {'test1': 'ok', 'test2': {'w1': 'Ok', 'w2': 'or', 'w3': 'wrong'}}
>>> print(requests.post('http://localhost:8000/test.php', data=data).text)
array(2) {
["test1"]=>
string(2) "ok"
["test2"]=>
string(2) "w3"
}
requests
отправляет только последний элемент списков или словарей в $_POST
.
Ожидаемое поведение: $_POST
получение всего словаря.
Это ошибка или я что-то не так делаю?
Я использую php сервер в Ubuntu:
php -version
PHP 7.3.11-0ubuntu0.19.10.3 (cli) (built: Feb 12 2020 15:22:33) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.11, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.11-0ubuntu0.19.10.3, Copyright (c) 1999-2018, by Zend Technologies
РЕДАКТИРОВАТЬ:
- Используя
requestbin.com
(как предложено Slam), я проверил, что requests
фактически отправляет все data. - Я сделал три попытки получить его с php: (1) php сервер в моей Ubuntu (как показано в исходном вопросе), (2) виртуальную машину (VirtualBox, используя ЛАМПА под ключ), (3) бесплатный хостинг сайта. И никто из них не получает данные правильно , только последний элемент вложенного словаря.
- Итак, это проблема PHP, а не
requests
. Но я все еще не знаю, что делать. Любая помощь о том, какой php код использовать?
С другой стороны:
- Slam также предложил использовать
json
. Этот ответ объясняет, как получить его из php: { ссылка } (см. «Лучшее решение», внизу). - Решение json работает нормально в трех php тестах, которые я сделал. (Итак, это полезный обходной путь, но оригинальный вопрос все еще открыт).