Changeset 1554
- Timestamp:
- 12/22/06 03:23:47
- Files:
-
- trunk/cherrypy/wsgiserver.py (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/wsgiserver.py
r1553 r1554 39 39 40 40 import base64 41 import mimetools # todo: use email42 41 import Queue 43 42 import os … … 76 75 socket_errors_to_ignore.append("timed out") 77 76 78 # These are lowercase because mimetools.Message uses lowercase keys. 79 comma_separated_headers = [ 80 'accept', 'accept-charset', 'accept-encoding', 'accept-language', 81 'accept-ranges', 'allow', 'cache-control', 'connection', 'content-encoding', 82 'content-language', 'expect', 'if-match', 'if-none-match', 'pragma', 83 'proxy-authenticate', 'te', 'trailer', 'transfer-encoding', 'upgrade', 84 'vary', 'via', 'warning', 'www-authenticate', 85 ] 86 77 comma_separated_headers = ['ACCEPT', 'ACCEPT-CHARSET', 'ACCEPT-ENCODING', 78 'ACCEPT-LANGUAGE', 'ACCEPT-RANGES', 'ALLOW', 'CACHE-CONTROL', 79 'CONNECTION', 'CONTENT-ENCODING', 'CONTENT-LANGUAGE', 'EXPECT', 80 'IF-MATCH', 'IF-NONE-MATCH', 'PRAGMA', 'PROXY-AUTHENTICATE', 'TE', 81 'TRAILER', 'TRANSFER-ENCODING', 'UPGRADE', 'VARY', 'VIA', 'WARNING', 82 'WWW-AUTHENTICATE'] 87 83 88 84 class HTTPRequest(object): … … 224 220 225 221 # then all the http headers 226 headers = mimetools.Message(self.rfile)222 headers = rfc822.Message(self.rfile) 227 223 self.environ.update(self.parse_headers(headers)) 228 224 … … 294 290 """Parse the given HTTP request message-headers.""" 295 291 environ = {} 296 ct = headers. getheader("Content-type", "")292 ct = headers.dict.get("content-type") 297 293 if ct: 298 294 environ["CONTENT_TYPE"] = ct 299 cl = headers. getheader("Content-length") or ""295 cl = headers.dict.get("content-length") 300 296 if cl: 301 297 environ["CONTENT_LENGTH"] = cl 302 298 303 # Must use keys() here for Python 2.3 (rfc822.Message had no __iter__). 304 for k in headers.keys(): 305 if k in ('transfer-encoding', 'content-type', 'content-length'): 306 continue 299 for line in headers.headers: 300 if line[:1].isspace(): 301 v = line.strip() 302 else: 303 k, v = line.split(":", 1) 304 k, v = k.strip().upper(), v.strip() 305 envname = "HTTP_" + k.replace("-", "_") 307 306 308 envname = "HTTP_" + k.upper().replace("-", "_")309 307 if k in comma_separated_headers: 310 308 existing = environ.get(envname) 311 309 if existing: 312 environ[envname] = ", ".join([existing] + headers.getheaders(k)) 313 else: 314 environ[envname] = ", ".join(headers.getheaders(k)) 315 else: 316 environ[envname] = headers[k] 310 v = ", ".join((existing, v)) 311 environ[envname] = v 312 317 313 return environ 318 314 … … 337 333 338 334 # Grab any trailer headers 339 headers = mimetools.Message(self.rfile)335 headers = rfc822.Message(self.rfile) 340 336 self.environ.update(self.parse_headers(headers)) 341 337

