处理HTTP post中的重复键以指定多个值

时间:2014-11-24 23:54:32

标签: python http-post python-requests

背景

  • python 2.7
  • 请求模块
  • 带有重复键的http帖子,用于指定多个值

问题

Trevor正在使用带有重复键的网站的python请求来指定多个值。问题是,JSON和Python字典不允许重复键,因此只有其中一个键可以通过。

目标

  • 目标是使用python请求创建一个HTTP帖子,其中包含POST名称 - 值对中重复名称的重复键。

尝试失败

## sample code
payload = {'fname': 'homer', 'lname': 'simpson'
         , 'favefood': 'raw donuts'
         , 'favefood': 'free donuts'
         , 'favefood': 'cold donuts'
         , 'favefood': 'hot donuts'
         }
rtt = requests.post("http://httpbin.org/post", data=payload)

另见

网络链接:

问题

  • Trevor如何使用python请求完成此任务?

1 个答案:

答案 0 :(得分:9)

您可以通过以下方式合成有效负载:

payload = [
    ('fname', 'homer'), ('lname', 'simpson'),
    ('favefood', 'raw donuts'), ('favefood', 'free donuts'),
]
rtt = requests.post("http://httpbin.org/post", data=payload)

但是如果你的情况允许,我更喜欢在列表中使用所有'favefoood'POST一个JSON:

payload = {'fname': 'homer', 'lname': 'simpson', 
    'favefood': ['raw donuts', 'free donuts']
}
# 'json' param is supported from requests v2.4.2
rtt = requests.post("http://httpbin.org/post", json=payload)

或者如果不首选JSON,请将所有'favefood'组合成一个字符串(仔细选择分隔符):

payload = {'fname': 'homer', 'lname': 'simpson',
    'favefood': '|'.join(['raw donuts', 'free donuts']
}
rtt = requests.post("http://httpbin.org/post", data=payload)