summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/news.txt5
-rw-r--r--paste/proxy.py14
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))