在Python的世界里,用requests库发个POST请求也一样,有时候你得确保参数的顺序得守规矩,不然服务器可能理你都不理。
那怎么保持POST请求参数的顺序呢?咱们得换个法子:用 collections.OrderedDict
来拯救世界。
OrderedDict
这个不起眼的家伙,能像老师在课堂上那样,让乱坐的学生排排坐,按顺序来。你创建一个 OrderedDict
,按照你想要的顺序添加参数,requests库就会照你的吩咐去排队,一个挨着一个,和你塞进去的一模一样。
那具体怎么操作呢?来看个栗子:
import requests
from collections import OrderedDict# 我们先按顺序把参数塞进OrderedDict
params_in_order = OrderedDict([("step1", "wake-up"),("step2", "brush-teeth"),("step3", "eat-breakfast"),("step4", "go-to-work")
])# 然后在发POST请求的时候,将这个有序的字典传给data参数
response = requests.post("http://example.com/api", data=params_in_order)# 搞定!服务器收到的参数顺序就是你安排的那样
是不是很像找到了一把打开秘密花园的钥匙?一旦掌握了 OrderedDict
这个神器,无论多任性的服务器要求怎样的参数顺序,都能玩转自如。
但如果你的目标是纯粹就是要保证字段顺序,OrderedDict
只是个开始。因为HTTP协议并没有要求POST请求中的字段必须是有序的。服务器通常不会依赖字段的顺序,所以特别强调这个顺序意义不大,除非服务器端的设计特别针对顺序进行了处理。
所以,你也有可能需要用到神奇的小工具——json
——以确保整个请求体是有序的:
import requests
import json
from collections import OrderedDict# 依旧是你的参数顺序
params_in_order = OrderedDict([("step1", "wake-up"),("step2", "brush-teeth"),("step3", "eat-breakfast"),("step4", "go-to-work")
])# 这次我们吧有序字典转换成JSON字符串,然后作为请求体发送
response = requests.post("http://example.com/api", data=json.dumps(params_in_order))# 这样,服务器接收到的就是一个JSON格式的字符串,里面的“键值对”顺序是有序的
但是别忘了,如果服务器是期望一个form表单的格式,而你却发送了JSON字符串,那就画蛇添足了,服务器不仅不理你,可能还会给你来个400错误码“笔仙拒绝交流”。