在Python2.7中,如何防止urllib2.Request类的默认操作将头大写?

在Python2.7中,如何防止urllib2.Request类的默认操作将头大写?,python,python-2.7,urllib2,Python,Python 2.7,Urllib2,如何防止python 2.7中urllib2.Request类的默认操作将标头大写。当我创建urllib2.Request类实例并在默认情况下传递标头时,我希望在执行请求时标头为大写。我该如何做呢。我执行请求的Web服务接受大写的标题(例如HTTP_request_VAL) 提前感谢根据规范,HTTP头名称是不区分大小写的,但是如果您的Web服务似乎在这方面有问题,您将不得不求助于一些黑客,因为标题框是硬连接到urllib2的。除非您想对库的一半进行子类化以除去它,否则无法绕过它 另一种方法是将

如何防止python 2.7中urllib2.Request类的默认操作将标头大写。当我创建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
更好的解决方案是使用,它不会修改您的标题:

import requests

requests.get('http://example.com', headers={
    'EXAMPLE-header': 'foo'
})

根据规范,HTTP头名称是不区分大小写的,但是如果您的Web服务似乎在这方面有问题,您将不得不求助于一些黑客,因为标题框是硬连接到urllib2的。除非您想对库的一半进行子类化以除去它,否则无法绕过它

另一种方法是将
str
子类化,并使用
SafeString('foo')
而不是
'foo'
作为标题名,但这似乎是一个错误的做法:

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

    def capitalize(self):
        return self
更好的解决方案是使用,它不会修改您的标题:

import requests

requests.get('http://example.com', headers={
    'EXAMPLE-header': 'foo'
})

覆盖加法器功能

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")

继续保持现状

覆盖加法器功能

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")

继续保持现状

您似乎混淆了CGI对标题的标准处理和必需的标题
HTTP_-REQUEST_-VAL
REQUEST-VAL
HTTP头的CGI版本,而不是头是区分大小写匹配的。需要明确的是:
HTTP_-REQUEST_-VAL
环境变量是通过将HTTP头大写、用下划线替换破折号以及将
HTTP
前置到头名称来设置的。这也意味着(根据HTTP RFC标准的要求)头匹配是不区分大小写的。您似乎将头的CGI标准处理与所需的头混淆了
HTTP_-REQUEST_-VAL
REQUEST-VAL
HTTP头的CGI版本,而不是头是区分大小写匹配的。需要明确的是:
HTTP_-REQUEST_-VAL
环境变量是通过将HTTP头大写、用下划线替换破折号以及将
HTTP
前置到头名称来设置的。这也意味着(根据HTTP RFC标准的要求)头匹配不区分大小写。请注意,OP很可能会被所有大写标题中带有下划线和
HTTP
prepend的CGI标准设置环境变量所混淆。设置
Request Val
头很可能是这里所需要的,而不是在客户端使用请求头。r.headers['HTTP\u Request\u Val']='foo'不起作用,它是大写的headers@carol当前位置我想urllib2比我想象的更坏。请参阅我的更新。请注意,OP很可能会被所有大写标题中带有下划线和
HTTP
prepend的CGI标准设置环境变量所混淆。设置
Request Val
头很可能是这里所需要的,而不是在客户端使用请求头。r.headers['HTTP\u Request\u Val']='foo'不起作用,它是大写的headers@carol当前位置我想urllib2比我想象的更坏。查看我的更新。