Index: Lib/urllib2.py =================================================================== --- Lib/urllib2.py (revision 62045) +++ Lib/urllib2.py (working copy) @@ -182,9 +182,25 @@ host = _cut_port_re.sub("", host, 1) return host.lower() +class CaseInsensitiveDict(dict, UserDict.DictMixin): + """CaseInsensitiveDict for URL Headers.""" + def __init__(self, *args, **kw): + self.orig = {} + super(CaseInsensitiveDict, self).__init__(*args, **kw) + def items(self): + keys = dict.keys(self) + values = dict.values(self) + return[(self.orig[k],v) for k in keys for v in values] + def __setitem__(self, k, v): + hash_val = hash(k.lower()) # hash value of strings is normalized + self.orig[hash_val] = k + dict.__setitem__(self, hash_val, v) + def __getitem__(self, k): + return dict.__getitem__(self, hash(k.lower())) + class Request: - def __init__(self, url, data=None, headers={}, + def __init__(self, url, data=None, headers=CaseInsensitiveDict, origin_req_host=None, unverifiable=False): # unwrap('') --> 'type://host/path' self.__original = unwrap(url) @@ -263,11 +279,11 @@ def add_header(self, key, val): # useful for something like authentication - self.headers[key.capitalize()] = val + self.headers[key.title()] = val def add_unredirected_header(self, key, val): # will not be added to a redirected request - self.unredirected_hdrs[key.capitalize()] = val + self.unredirected_hdrs[key.title()] = val def has_header(self, header_name): return (header_name in self.headers or

AltStyle によって変換されたページ (->オリジナル) /