背景
在对接一些外部 API 时,有时会遇到要求 Request Headers 中的某个字段,key 值必须是小写才能正常调用,而在 scrapy 中,默认所有 headers 的 key 都类似b'User-Agent'
这种形式,我希望对代码进行少量改动达到正常调用此类接口的目的。
解决方案(分析过程在后面)
在 scrapy 项目中添加以下代码:
from twisted.web.http_headers import Headers as TwistedHeaders
TwistedHeaders._caseMappings.update({
# b'headers对应key的小写': b'期望结果的小写'
b'accept-language': b'accept-language',
b'user-agent': b'user-agent',
b'content-type': b'content-type',
# ...继续添加你想要映射的字段...
})
注意:1. 对于添加代码的位置,网上有些文章说需要在import scrapy
之前或Spider
类之前,实际上只要你喜欢,你可以在项目中的settings.py/middlewares.py/pipelines.py/spider文件
等任意 python 文件中的任意位置添加,一般我们放在文件顶部即可。2. 查看最终效果需要在抓包工具中查看。