如何避免Scrapy自动将header的key转首字母大写

问题

在用scrapy开发爬虫的时候,用fiddler抓包发现scrapy会自动将请求的header的key转为单词首字母大写,例如将accept-encoding转成Accept-Encoding,将accept转成Accept。问题是有些header由于验证问题我并不希望转换大写。

尝试过的方法

我尝试将scrapy/http/headers.py里的normkey方法中的key.title()改为key.lower()

class Headers(CaselessDict):
    ...
    def normkey(self, key):
        """Normalize key to bytes"""
        return self._tobytes(key.title())  # 试过将这里改为 key.lower()

看似生效了,但最终在fiddler中看到的还是转成首字母大写了,并且验证失败

另外使用requests发送请求,就不会有这种情况,抓包看都正常
,所以基本可以排除软件等环境问题

请问各位大师,scrapy具体是在哪个步骤将header的key转成单词首字母大写的

阅读 4.7k
2 个回答
新手上路,请多包涵

在spider文件中spider类的上面写下不希望首字母大写的header

from twisted.web.http_headers import Headers as TwistedHeaders

TwistedHeaders._caseMappings.update({
    b'uuid': b'uuid',
    b'content-type': b'content-type',
})
新手上路,请多包涵

请问问题解决了吗?我通过TwistedHeaders._caseMappings.update这种方式设置还是没生效,这串代码是放在start_request()方法里运行的,headers里的key首字母仍然是大写。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题