Du hast recht ich hab es gerade auch mal damit getestet:
Code: Alles auswählen
import urllib2
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
opener.addheaders = [('TEST-HEADER', 'Mozilla/5.0')]
handle = opener.open("http://www.google.de")
'User-Agent' wird zu 'User-agent'
und
'TEST-HEADER' wird zu 'Test-header'
Und das liegt an:
Code: Alles auswählen
def add_header(self, key, val):
# useful for something like authentication
self.headers[key.capitalize()] = val
In
http://svn.python.org/view/python/trunk ... iew=markup
Ich geh mal davon aus, das das dem Standart entpricht. Wobei Firefox allerdings die andere Schreibweise nimmt...
EDIT: Ich sehe gerade, das bei AbstractHTTPHandler.do_request_() das gemacht wird:
Code: Alles auswählen
for name, value in self.parent.addheaders:
name = name.capitalize()
EDIT2: Also Lösung würde ich sagen, die betreffenden Methoden einfach überschreiben, aber so auf die schnelle Funktioniert das nicht:
Code: Alles auswählen
import urllib2
class Request(urllib2.Request):
def add_header(self, key, val):
print "key:", key
self.headers[key] = val
urllib2.Request = Request
class AbstractHTTPHandler(urllib2.AbstractHTTPHandler):
def do_request_(self, request):
host = request.get_host()
if not host:
raise URLError('no host given')
if request.has_data(): # POST
data = request.get_data()
if not request.has_header('Content-type'):
request.add_unredirected_header(
'Content-type',
'application/x-www-form-urlencoded')
if not request.has_header('Content-length'):
request.add_unredirected_header(
'Content-length', '%d' % len(data))
scheme, sel = splittype(request.get_selector())
sel_host, sel_path = splithost(sel)
if not request.has_header('Host'):
request.add_unredirected_header('Host', sel_host or host)
for name, value in self.parent.addheaders:
#~ name = name.capitalize()
print "Name:", name
if not request.has_header(name):
request.add_unredirected_header(name, value)
return request
urllib2.AbstractHTTPHandler = AbstractHTTPHandler
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
opener.addheaders = [('TEST-HEADER', 'Mozilla/5.0')]
handle = opener.open("http://www.google.de")
Ansonsten, könntest du socket nehmen, aber das ist aufwendiger:
http://www.python-forum.de/viewtopic.php?t=3615