我有一个嵌套字典,我希望将其传递给Web服务(用PHP编写)并且正在努力,因为我无法访问我需要的数据。
字典看起来像
import requests
from nested_dict import nested_dict
data = nested_dict()
data['name'] = 'test'
data['cookies']['PHPSESSID']['name'] = 'PHPSESSID'
data['cookies']['PHPSESSID']['essential'] = 'Essential'
data['cookies']['CookieNotice']['name'] = 'CookieNotice'
data['cookies']['CookieNotice']['essential'] = 'Essential'
然后我提出要求:
r = requests.post('someurl.com', data = data)
在接收网址someurl.com(用PHP编写)中,我可以访问第一级没问题,例如
header('Content-Type: application/json');
$data = $_REQUEST;
$response['content'] = $data['name'];
$response = $response['content'];
echo json_encode($response);
问题是尝试访问嵌套dict中的数据。当我遇到someurl.com时,我不知道它到达的是什么形式,因此我不能用它来产生循环。我想做的是:
header('Content-Type: application/json');
$data = $_REQUEST;
$response['content'] = $data['name'];
foreach ($data['cookies'] as $k => $v):
$response['content'] .= $k." ".$v;
endforeach;
$response = $response['content'];
echo json_encode($response);
当在模板中打印出响应时,嵌套部分会显示内容......
非常感谢任何帮助!
更新
我尝试了许多排列,但仍在苦苦挣扎!我只需要能够将嵌套的dict(或json)传递给我的接收URL' someurl.com'并能够(json)在PHP中解码,例如$ d = json_decode($ _ POST)
这个'工作'但我不能做'任何回应:
dat = json.dumps(data)
req = requests.get('someurl.com',params=dat)
尝试使用requests.post时,我无法做任何事情,如果我传递原始字典或将其转换为json。
非常感谢
答案 0 :(得分:2)
对于Python请求模块,这很糟糕:
requests.post(url, data=nested_dict)
好:
requests.post(url, json=nested_dict)
注意:nested_dict
不需要进行字符串化。只需将其作为字典传递即可。
答案 1 :(得分:1)
对我有用的解决方案如下:
import requests,json
from nested_dict import nested_dict
data = nested_dict()
data['name'] = 'test'
data['cookies']['PHPSESSID']['name'] = 'PHPSESSID'
data['cookies']['PHPSESSID']['essential'] = 'Essential'
data['cookies']['CookieNotice']['name'] = 'CookieNotice'
data['cookies']['CookieNotice']['essential'] = 'Essential'
datajson = json.dumps(data)
req = requests.post('someurl.com/myendpoint.php',data={'payload':datajson},timeout=3.00)
然后在someurl.com/myendpoint.php的PHP脚本中我可以使用$ _POST
$data = json_decode($_POST['payload']);