1

如何防止 urllib2.Request 类的默认操作在 python 2.7 中将标头大写。当我创建一个 urllib2.Request 类实例并默认传递标头时,是否通过了标头的大写,而不是当我希望标头为大写时做一个请求。我该怎么做。我发出请求的Web服务接受大写的标头(例如HTTP_REQUEST_VAL)。

提前致谢

4

2 回答 2

4

根据规范,HTTP 标头名称不区分大小写,但如果您的 web 服务似乎有问题,您将不得不求助于一些技巧,因为标题大小写硬连线到 urllib2。除非您想将库的一半子类化以摆脱它,否则无法绕过它。

另一种方法是子类化str并使用SafeString('foo')而不是'foo'标题名称,但这似乎是一个糟糕的黑客:

class SafeString(str):
    def title(self):
        return self

    def capitalize(self):
        return self

更好的解决方案是使用Requests,它不会修改您的标头:

import requests

requests.get('http://example.com', headers={
    'EXAMPLE-header': 'foo'
})
于 2013-08-16T07:39:39.943 回答
1

覆盖 add_adder 功能

import urllib.request

class CustomHttp(urllib.request.Request):
    def add_header(self, key, value):
        self.headers[key] = value

req = CustomHttp(url, data=data, headers=headers, method="POST")

并继续原样。

于 2019-08-08T09:34:59.017 回答