在python中处理HTTP post响应中的重复键

时间:2016-12-13 00:45:30

标签: python python-2.7 python-3.x http-post

当我向网站发送HTTP帖子时,我的网络调试器会收到类似的回复

payload = 
          {
       'name': 'simpson'
     , 'color': 'red'
     , 'color': 'orange'
     , 'color': 'blue'
     , 'color': 'orange'
       'food' : 'pizza'
         }

但是在python中,当我发出相同的请求并执行r.headers时,我得到了这个回复

    payload = 
          {
       'name': 'simpson'
     , 'color': 'orange'
       'food' : 'pizza'
         }

2 个答案:

答案 0 :(得分:0)

该格式是有效的JSON,但它包含无法用JSON表示的信息。

解决方案是不使用JSON,而是编写一个使用数据点对的列表(2个值元组)的编码器。

更新

data = [
   ('name', 'simpson'),
   ('color', 'red'),
   ('color', 'orange'),
   ...
   ('food', 'pizza'),
]
content = "{%s}" % ', '.join("'%s': '%s'" % pair for pair in data)

POST内容。

答案 1 :(得分:0)

这取决于您提出请求的方式。实际上,HTTP响应主体始终是一个可以解释为JSON或其他内容的文本,具体取决于您使用的请求。可能你的库试图创建给定数据和错误的JSON,因为这些数据不能被解释为JSON,因为它包含属于同一个键的几个值。我建议你提取原始响应文本并以合适的方式解析它。例如,您可以使用httplib来请求:

import httplib

conn = httplib.HTTPConnection("www.thehost")
conn.request("POST", "/post/url/you/request", "data1=q&data2=w", {...some hreaders...}
response = conn.getresponse()
body = response.read() # body is the text you need, it's a string
response.close()
conn.close()