项目需要在http header加上自定义内容, 后台使用Django。 用postman添加header后发送请求, 在request中没有发现自定义的内容,开始怀疑是postman没有成功添加自定义header内容, 于是用python requests包写请求发送, 还是没有发现, 最后去查Django发现了秘密。
Django将所有http header(包括自定义的)的内容都放到了request的META里面了, 这是个标准的python dict, 并且对自定义的内容进行了重命名, 规则如下:
(1) 所有header名大写,将连接符“-”改为下划线“_”
(2) 除CONTENT_TYPE和CONTENT_LENGTH,其它的header名称前加“HTTP_”前缀
例如:
import requests
import json
data = {'some': 'data'}
headers = {'content-type': 'application/json',
'device-code': '258964',
'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('http://127.0.0.1:8000/useracount/login/', data=data, headers=headers)
print(r.text)
META中device-code的名字变成了HTTP_DEVICE_CODE