HTTP 请求为 params 中的键分配多个值
Posted
技术标签:
【中文标题】HTTP 请求为 params 中的键分配多个值【英文标题】:HTTP requests assign multiple values to a key in 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 是否有原因? 是的,它不起作用(请参阅编辑) 【参考方案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>])
【讨论】:
以上是关于HTTP 请求为 params 中的键分配多个值的主要内容,如果未能解决你的问题,请参考以下文章
如何比较字典值中的多个数组,并将每个数组元素的字典键映射到新数组/列表中
如何在chartjs数据集中为Object []使用x值中的日期,我收到一个错误:'TS2322:类型'字符串'不可分配给类型'数字'。