fix some general awfulness with http header handling
This commit is contained in:
parent
f0e6f2d6da
commit
848d5791ed
|
@ -36,6 +36,9 @@ class IpInfoByIpApi(IpInfoBase):
|
||||||
|
|
||||||
def _parse_headers(self, it):
|
def _parse_headers(self, it):
|
||||||
# returns an error message as a string, or None.
|
# returns an error message as a string, or None.
|
||||||
|
x_cooldown = None
|
||||||
|
x_remaining = None
|
||||||
|
|
||||||
for line in it:
|
for line in it:
|
||||||
if line == b"":
|
if line == b"":
|
||||||
break # end of header
|
break # end of header
|
||||||
|
@ -106,27 +109,17 @@ class IpInfoByIpApi(IpInfoBase):
|
||||||
response = await reader.read()
|
response = await reader.read()
|
||||||
lines = response.splitlines()
|
lines = response.splitlines()
|
||||||
|
|
||||||
err = None
|
|
||||||
it = iter(lines)
|
it = iter(lines)
|
||||||
|
if next(it, None) == b"HTTP/1.1 200 OK":
|
||||||
line = next(it)
|
|
||||||
if line != b"HTTP/1.1 200 OK":
|
|
||||||
self.cooldown = time() + 60
|
|
||||||
err = "not ok"
|
|
||||||
it = () # exhaust iterator (not really)
|
|
||||||
|
|
||||||
x_cooldown = None
|
|
||||||
x_remaining = None
|
|
||||||
|
|
||||||
if err is None:
|
|
||||||
err = self._parse_headers(it)
|
err = self._parse_headers(it)
|
||||||
|
code = next(it, None)
|
||||||
for i, line in enumerate(it):
|
if code is None:
|
||||||
if i == 0:
|
err = "missing body"
|
||||||
code = line
|
if next(it, None) is not None:
|
||||||
else:
|
|
||||||
err = "too many lines"
|
err = "too many lines"
|
||||||
break
|
else:
|
||||||
|
err = "not ok"
|
||||||
|
self.cooldown = time() + 60
|
||||||
|
|
||||||
writer.close()
|
writer.close()
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user