我是一名PHP开发人员,正试图创建一个Python脚本来与我的应用程序对话。这是代码。我的错误在哪里?
#Python客户端代码
import json
import requests
POST_URL = 'https://corporate-url.com/index.php?service=api&format=json&task=sayhello'
payload_map = {'key1': 'value1', 'key2': 'value2'}
payload_tuples = [
('key1', 'value1'),
('key2', 'value2')
]
payload_mixed = {
'name': 'John',
'surname': 'Doe',
'Age': 30,
'log': payload_tuples
}
print(json.dumps(payload_mixed)) # renders {"Age": 30, "surname": "Doe", "name": "John", "log": [["key1", "value1"], ["key2", "value2"]]}
r = requests.post(POST_URL, data=payload_mixed)
print(r.url)
print(r.status_code)
print(r.json())
服务器上的PHP代码
$response = (isset($_POST['log']) ? $_POST['log'] : $_POST);
echo json_encode($response, JSON_THROW_ON_ERROR);
exit;
客户端Python控制台中的OUTPUT
# with object payload_map as object 'log' in object payload_mixed
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
key1
# with object payload_tuples as object 'log' in object payload_mixed
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
value2
为什么";log"-对象永远不会被正确渲染,而只是它的一个片段?
如果我执行这个命令
r = requests.post(POST_URL, data=payload_map)
则输出为
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
{u'key2': u'value2', u'key1': u'value1'}
如果我执行这个命令
r = requests.post(POST_URL, data=payload_tuples)
则输出为
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
{u'key2': u'value2', u'key1': u'value1'}
为什么我的嵌套对象没有这样渲染?我要求它像这样呈现:
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
{u'Age': u'30', u'surname': u'Doe', u'name': u'John', u'log': {u'key2': u'value2', u'key1': u'value1'}}
编辑:建议使用json.dumps()
包装有效载荷对象。我更改并看到以下输出:
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
[]
将我的PHP脚本更改为调试$_REQUEST
而不是$_POST
,这表明没有收到POST数据:
$response = $_REQUEST;
echo json_encode($response, JSON_THROW_ON_ERROR);
exit;
输出:
https://corporate-url.com/index.php?service=api&format=json&task=sayhello
200
{u'task': u'sayhello', u'service': u'api', u'format': u'json'}
试试这个
import json
import requests
POST_URL = 'https://corporate-url.com/index.php?service=api&format=json&task=sayhello'
payload_map = {'key1': 'value1', 'key2': 'value2'}
payload_tuples = [
('key1', 'value1'),
('key2', 'value2')
]
payload_mixed = {
'name': 'John',
'surname': 'Doe',
'Age': 30,
'log': payload_tuples
}
r = requests.post(POST_URL, data=json.dumps(payload_mixed)) #add json.dumps()
print(r.url)
print(r.status_code)
print(r.json())