diff options
| -rw-r--r-- | docs/news.txt | 5 | ||||
| -rw-r--r-- | paste/proxy.py | 14 |
2 files changed, 17 insertions, 2 deletions
diff --git a/docs/news.txt b/docs/news.txt index bbe3c99..a6f4612 100644 --- a/docs/news.txt +++ b/docs/news.txt @@ -21,6 +21,11 @@ svn trunk * The ``paste.gzipper`` gzipping middleware wasn't changing the Content-Length header properly; thanks to Brad Clements for the fix. +* Fixed ``paste.proxy`` to not use anything based on the dict form of + ``httplib..HTTPMessage``. This form folds headers together in a way + that breaks ``Set-Cookie`` headers (two ``Set-Cookie`` headers would + be merged into one). + 1.0 --- diff --git a/paste/proxy.py b/paste/proxy.py index fd359bc..9148159 100644 --- a/paste/proxy.py +++ b/paste/proxy.py @@ -101,7 +101,9 @@ class Proxy(object): body, headers) res = conn.getresponse() headers_out = [] - for header, value in res.getheaders(): + for full_header in res.msg.headers: + header, value = full_header.split(':', 1) + value = value.strip() if header.lower() not in filtered_headers: headers_out.append((header, value)) @@ -161,6 +163,12 @@ class TransparentProxy(object): self.force_host = force_host self.force_scheme = force_scheme + def __repr__(self): + return '<%s %s force_host=%r force_scheme=%r>' % ( + self.__class__.__name__, + hex(id(self)), + self.force_host, self.force_scheme) + def __call__(self, environ, start_response): scheme = environ['wsgi.url_scheme'] if self.force_host is None: @@ -211,7 +219,9 @@ class TransparentProxy(object): path, body, headers) res = conn.getresponse() headers_out = [] - for header, value in res.getheaders(): + for full_header in res.msg.headers: + header, value = full_header.split(':', 1) + value = value.strip() if header.lower() not in filtered_headers: headers_out.append((header, value)) |
