当前位置: 首页 > 知识库问答 >
问题:

带有嵌套字典值/args的Python POST请求

阳宾实
2023-03-14

已经看过这里,这里和这里,但仍然有问题。我有一个post data,如下所示:

{
   "config":{
             "param1": "param1 value",
             "param2": "param2 value",
             "param3": "param3 value"
            },
   "name": "Testing API",
   "url": "https://testingapi.my.own.com",
   "enabled": true
}
{
  "Content-Type": "application/json",
  "referer": "https://testingapi.my.own.com",
  "X-CSRFToken": "my token value here"
}

代码如下:

headers = {"Content-Type": "application/json",
           "referer": "https://testingapi.my.own.com",
           "X-CSRFToken": "my token"
}

request_data = {
   "config":{
             "param1": "param1 value",
             "param2": "param2 value",
             "param3": "param3 value"
            },
   "name": "Testing API",
   "url": "https://testingapi.my.own.com",
   "enabled": "true"
}

#tried the following:
r = session.post(url, data =  request_data, headers=headers)
r = session.post(url, json =  json.dumps(request_data), headers=headers)

共有1个答案

司空学智
2023-03-14

当您执行data=request_data时,嵌套字典并没有像您所期望的那样打包到请求正文中。请尝试检查request对象的body属性:

import requests
s = requests.Session()
request_data = {
    "config":{
        "param1": "param1 value",
        "param2": "param2 value",
        "param3": "param3 value"
     },
    "name": "Testing API",
    "url": "https://testingapi.my.own.com",
    "enabled": True
}
r = s.post('https://httpbin.org/post/404', data=request_data )
r.request.body

回报

'URL=https%3a%2f%2ftestingapi.my.own.com&enabled=true&config=param3&config=param2&config=param1&name=testing+api'

因此,在将数据传递给data之前,您需要序列化数据

r = s.post('https://httpbin.org/post/404', data=json.dumps(request_data), )

或者按照Paul的建议,使用JSON参数并将数据提示传递给它:

r = s.post('https://httpbin.org/post/404', json=request_data)
 类似资料:
  • 问题内容: 我试图遍历字典并打印出所有值不是嵌套字典的键值对。如果值是字典,我想进入它并打印出它的键值对…等等。有什么帮助吗? 这个怎么样?它仍然只打印一件事。 完整的测试用例 字典: 结果: 问题答案: 如Niklas所说,你需要递归,即你想定义一个函数来打印你的字典,如果值是一个dict,则想使用这个新字典来调用你的打印函数。 就像是 : 或从Python 3开始:

  • 问题内容: 我是python的新手,需要帮助解决问题: 我有像这样的字典 除了做其他事情,我们还有其他方法可以获取三个价值吗? ? 问题答案: 您可以在每个字典上使用get()。确保已为每个访问添加了“无”检查。

  • 问题内容: 我有一本包含字典的字典,其中可能还包含字典,例如 目前,我正在打开包装以获取ID 001的“开单至”,“交易参考” a1,如下所示: 我忍不住觉得这有点笨拙,尤其是最后两行-我觉得以下内容应该可以工作: 有没有一种更简单的方法可以向下钻取嵌套字典而不必解压缩临时变量? 问题答案: 实际有效。是表示的表达式,因此您可以在其中进行查找。对于实际程序,我更喜欢使用面向对象的方法来嵌套字典。对

  • 我正在努力编写一本嵌套非常多的词典。只有当字典中有“name”:“bingo”时,我才需要获取字典的“main_id”。 我有解决办法,但在我看来是相当丑陋的。 我想知道: 有更好更干净的方法来实现它(总是;)

  • 问题内容: 搜索一个值并获取父词典名称(键): 在以上字典中,我需要搜索类似的值:。其中,字典中没有任何值重复。如何搜索?因此它应该返回字典中的父键。 请注意 :解决方案应在 未修改的情况下 适用 于 Python 2.7和Python 3.3。 问题答案: 这是对嵌套dict的迭代遍历,还可以跟踪导致特定点的所有键。因此,一旦您在字典中找到正确的值,您就已经具有获取该值所需的键。 如果将以下代码

  • 问题内容: 在键路径的帮助下从嵌套字典中获取值,这是: 该方法的输入参数是点分隔的关键路径,从关键路径=“ app.Garden.Flowers.white Flower”需要打印’Jasmine’。到目前为止,我的代码: 问题答案: 很接近。您需要(就像您在评论中一样)以递归方式遍历主JSON对象。您可以通过存储最外面的键/值的结果,然后使用它来获取下一个键/值等来完成操作,直到您脱离路径为止。