uaiohttpclient: Add support for redirects.

pull/226/merge
Paul Sokolovsky 2014-11-30 01:59:25 +02:00
rodzic 5e1af0f277
commit 16c57c50f4
1 zmienionych plików z 26 dodań i 14 usunięć

Wyświetl plik

@ -59,10 +59,14 @@ def request_raw(method, url):
def request(method, url):
redir_cnt = 0
redir_url = None
while redir_cnt < 2:
reader = yield from request_raw(method, url)
headers = []
sline = yield from reader.readline()
protover, st, msg = sline.split(None, 2)
protover, status, msg = sline.split(None, 2)
status = int(status)
chunked = False
while True:
line = yield from reader.readline()
@ -72,11 +76,19 @@ def request(method, url):
if line.startswith(b"Transfer-Encoding:"):
if b"chunked" in line:
chunked = True
elif line.startswith(b"Location:"):
url = line.rstrip().split(None, 1)[1].decode("latin-1")
if 301 <= status <= 303:
redir_cnt += 1
yield from reader.close()
continue
break
if chunked:
resp = ChunkedClientResponse(reader)
else:
resp = ClientResponse(reader)
resp.status = int(st)
resp.status = status
resp.headers = headers
return resp