Python 将嵌套字典传递给请求模块
我有一个嵌套的字典,我想把它传递给一个web服务(用PHP编写),但由于我无法访问所需的数据,我正在努力 这本字典看起来有点像Python 将嵌套字典传递给请求模块,python,django,python-requests,Python,Django,Python Requests,我有一个嵌套的字典,我想把它传递给一个web服务(用PHP编写),但由于我无法访问所需的数据,我正在努力 这本字典看起来有点像 import requests from nested_dict import nested_dict data = nested_dict() data['name'] = 'test' data['cookies']['PHPSESSID']['name'] = 'PHPSESSID' data['cookies']['PHPSESSID']['essenti
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)
在接收url 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\u decode($\u POST)
这“有效”,但我无法对响应“做”任何事情:
dat = json.dumps(data)
req = requests.get('someurl.com',params=dat)
当我尝试使用requests.post时,如果我传递原始字典或将其转换为json,我将无能为力
非常感谢我的解决方案如下:
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脚本中,我可以使用$\u帖子
$data = json_decode($_POST['payload']);
对于Python请求模块,这是错误的:
requests.post(url, data=nested_dict)
好:
注意:
nested_dict
不需要字符串化。只需将其作为字典传递。尝试使用json
而不是data
,即requests.post('someurl.com',json=data)
您好,谢谢您的回复。当我尝试这样做时,会出现JSONDECODE错误。你知道我如何检查传递给someurl.com的内容吗?(在PHP中)我尝试了$data=json_解码($_请求),并尝试了$response['content']=$data['source'];echo json_编码($response);但是得到了一个关于requests.post('someurl.com',json=data.to_dict())
的错误。嗨,对不起,还是没什么。在我尝试过的几乎所有排列中,我的异常都会被抛出。try:req=requests.post('someurl.com',json=data.to_dict(),timeout=3.00)。在我的接收url中,响应只是返回$\u请求或$\u POST,我得到了相同的结果——抛出异常。非常节俭!不幸的是,我个人需要使用data=
,因为我试图使用表单数据
requests.post(url, json=nested_dict)