~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/transport/http/_urllib2_wrappers.py

(vila) Force header names case to work-around buggy servers/proxies (#229076)

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
 
31
31
And a custom Request class that lets us track redirections, and
32
32
handle authentication schemes.
 
33
 
 
34
For coherency with python libraries, we use capitalized header names throughout
 
35
the code, even if the header names will be titled just before sending the
 
36
request (see AbstractHTTPHandler.do_open).
33
37
"""
34
38
 
35
39
DEBUG = 0
407
411
    _default_headers = {'Pragma': 'no-cache',
408
412
                        'Cache-control': 'max-age=0',
409
413
                        'Connection': 'Keep-Alive',
410
 
                        # FIXME: Spell it User-*A*gent once we
411
 
                        # know how to properly avoid bogus
412
 
                        # urllib2 using capitalize() for headers
413
 
                        # instead of title(sp?).
414
414
                        'User-agent': 'bzr/%s (urllib)' % bzrlib_version,
415
415
                        'Accept': '*/*',
416
416
                        }
511
511
        headers = {}
512
512
        headers.update(request.header_items())
513
513
        headers.update(request.unredirected_hdrs)
 
514
        # Some servers or proxies will choke on headers not properly
 
515
        # cased. httplib/urllib/urllib2 all use capitalize to get canonical
 
516
        # header names, but only python2.5 urllib2 use title() to fix them just
 
517
        # before sending the request. And not all versions of python 2.5 do
 
518
        # that. Since we replace urllib2.AbstractHTTPHandler.do_open we do it
 
519
        # ourself below.
 
520
        headers = dict((name.title(), val) for name, val in headers.iteritems())
514
521
 
515
522
        try:
516
523
            method = request.get_method()