Refactoring of proxy.py

- Correctly pass HTTP request version on to upstream servers
- Adjust tests not to hang due to a pathod response with no content-length
This commit is contained in:
Aldo Cortesi 2012-06-10 13:17:18 +12:00
parent 55ddf853cd
commit 52779d9db9
4 changed files with 19 additions and 13 deletions

View File

@ -536,7 +536,6 @@ class Request(HTTPMsg):
'proxy-connection',
'keep-alive',
'connection',
'content-length',
'transfer-encoding'
]
)
@ -551,15 +550,15 @@ class Request(HTTPMsg):
headers["connection"] = ["close"]
if not _proxy:
return FMT % (
self.method,
self.path,
self.method,
self.path,
self.httpversion[0],
self.httpversion[1],
str(headers),
str(headers),
content
)
else:
return FMT_PROXY % (
return FMT_PROXY % (
self.method,
self.scheme,
self.host,
@ -738,7 +737,7 @@ class Response(HTTPMsg):
headers = self.headers.copy()
utils.del_all(
headers,
['proxy-connection', 'connection', 'keep-alive', 'transfer-encoding']
['proxy-connection', 'transfer-encoding']
)
content = self.content
if content:

View File

@ -123,7 +123,6 @@ def read_http_body(rfile, connection, headers, all, limit):
content = rfile.read(limit if limit else None)
connection.close = True
else:
connection.close = True
content = ""
return content

View File

@ -3,9 +3,17 @@ import time
import libpathod.test, requests
import tutils
"""
Note that the choice of response code in these tests matters more than you
might think. libcurl treats a 304 response code differently from, say, a
200 response code - it will correctly terminate a 304 response with no
content-length header, whereas it will block forever waiting for content
for a 200 response.
"""
class Sanity(tutils.ProxTest):
def test_http(self):
assert self.pathod("205").status_code == 205
assert self.pathod("304").status_code == 304
assert self.log()
@ -23,10 +31,10 @@ class TestReverse(Sanity):
class TestProxy(tutils.ProxTest):
def test_http(self):
f = self.pathod("205")
assert f.status_code == 205
f = self.pathod("304")
assert f.status_code == 304
l = self.log()
assert l[0].address
assert "host" in l[1].headers
assert l[2].code == 205
assert l[2].code == 304

View File

@ -121,7 +121,7 @@ class ProxTest:
r = hurl.get(
"http://127.0.0.1:%s"%self.proxy.port + "/p/" + spec,
validate_cert=False,
#debug=hurl.utils.stdout_debug
debug=hurl.utils.stdout_debug
)
return r
else:
@ -129,7 +129,7 @@ class ProxTest:
self.urlbase + "/p/" + spec,
proxy=self.proxies,
validate_cert=False,
#debug=hurl.utils.stdout_debug
debug=hurl.utils.stdout_debug
)
@property