【问题标题】:HTTP requests assign multiple values to a key in paramsHTTP 请求为 params 中的键分配多个值
【发布时间】:2014-08-17 17:51:21
【问题描述】:

我正在使用 python 的请求库从 API 执行“GET”。这是我的代码的一部分:

payload = { 'topicIds':'128487',
            'topicIds':'128485', 
        'topicIds': '242793',
            'timePeriod':'10d', }

r= requests.get(url, params=payload, headers=headers)

根据 API 文档,我们可以为一个请求分配多个 topicId,如下所示:<url>topicId=123&topicId=246

当我尝试将 topicIds 值设置为这样的列表时:

payload = { 'topicIds':['128487' , '242793'],

我收到一个错误:{u'error': u'topicIds: has 2 terms, should be between 0 and 1'}

但是,当我运行代码时,我只从最后一个 topicIds => 'topicIds': '242793' 获取数据 我是不是写错了payload字典?

谢谢,

【问题讨论】:

  • 您没有列出 topicIds 是否有原因?
  • 是的,它不起作用(请参阅编辑)

标签: python json http python-requests


【解决方案1】:

这样也行

params = {'topicIds': ['128487', '128485', '242793'],
         'timePeriod':'10d', }

r= requests.get(url, params=params)

【讨论】:

    【解决方案2】:

    试试:

    payload = {'topicIds[]': ['128487', '242793']}
    r = requests.get(url, params=payload, headers=headers)
    

    这是在查询字符串中定义数组的最常用方法。

    【讨论】:

    • 这如何适应有效载荷变量?
    • 这只是我在复制粘贴测试代码时的一个错误。我现在已经编辑过了。需要注意的是 topicIds 后面的括号。值得一试,如果不了解 API 规范,我们真的无能为力。
    • @fasouto 出于某种奇怪的原因编辑了我的答案,根本没有进行测试,所以我把它回滚了。生成的 url 不带括号和不带括号是不一样的。带括号的结果是example.com/?topicIds%5B%5D=128487&topicIds%5B%5D=242793 - 没有结果的结果是example.com/?topicIds=128487&topicIds=242793 - 括号是在查询和发布参数中定义数组的最常用方法(例如,PHP 使用这种语法将 GET 参数解析为数组)。
    • @scandinavian_ 我测试过但它对我不起作用,这就是我编辑它的原因。我看到了 topicIds=[1,2] 和 topicIds=1&topicIds=2 但从来没有 topicIds[]=[1,2] 所以我坚持认为这是一个错字。我不知道最好的方法是什么,我现在没有时间调查,因此对给您带来的不便表示歉意
    【解决方案3】:

    是的,你写错了payload,试着打印这个dict,你会得到

    {'topicIds': '242793', 'timePeriod': '10d'}
    

    字典中的键被覆盖

    我认为最好从所有 topicId 中创建一个字符串,类似这样的

    '<separator>'.join([<list of topicIds>])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多