如何防止 urllib2.Request 类的默认操作在 python 2.7 中将标头大写。当我创建一个 urllib2.Request 类实例并默认传递标头时,是否通过了标头的大写,而不是当我希望标头为大写时做一个请求。我该怎么做。我发出请求的Web服务接受大写的标头(例如HTTP_REQUEST_VAL)。
提前致谢
如何防止 urllib2.Request 类的默认操作在 python 2.7 中将标头大写。当我创建一个 urllib2.Request 类实例并默认传递标头时,是否通过了标头的大写,而不是当我希望标头为大写时做一个请求。我该怎么做。我发出请求的Web服务接受大写的标头(例如HTTP_REQUEST_VAL)。
提前致谢
根据规范,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'
})
覆盖 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")
并继续原样。