Skip to content

Commit

Permalink
Merge pull request #549 from carlcarl/ignore_304_response_body
Browse files Browse the repository at this point in the history
Ignore 304/204 response body
  • Loading branch information
asvetlov committed Oct 4, 2015
2 parents 981b122 + 180496f commit b95b88c
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 1 deletion.
6 changes: 5 additions & 1 deletion aiohttp/client_reqrep.py
Original file line number Diff line number Diff line change
Expand Up @@ -583,6 +583,10 @@ def _setup_connection(self, connection):
self.content = self.flow_control_class(
connection.reader, loop=connection.loop)

def _need_parse_response_body(self):
return (self.method.lower() != 'head' and
self.status not in [204, 304])

@asyncio.coroutine
def start(self, connection, read_until_eof=False):
"""Start response processing."""
Expand Down Expand Up @@ -610,7 +614,7 @@ def start(self, connection, read_until_eof=False):
self.headers = CIMultiDictProxy(message.headers)

# payload
response_with_body = self.method.lower() != 'head'
response_with_body = self._need_parse_response_body()
self._reader.set_parser(
aiohttp.HttpPayloadParser(message,
readall=read_until_eof,
Expand Down
42 changes: 42 additions & 0 deletions tests/test_client_functional_newstyle.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,3 +119,45 @@ def go():
connector.close()

self.loop.run_until_complete(go())

def test_HTTP_304(self):
@asyncio.coroutine
def handler(request):
body = yield from request.read()
self.assertEqual(b'', body)
return web.Response(status=304)

@asyncio.coroutine
def go():
_, srv, url = yield from self.create_server('GET', '/', handler)
connector = aiohttp.TCPConnector(loop=self.loop)
r = yield from client.request('GET', url,
connector=connector, loop=self.loop)
content = yield from r.read()
self.assertEqual(r.status, 304)
self.assertEqual(content, b'')
r.release()
connector.close()

self.loop.run_until_complete(go())

def test_HTTP_304_WITH_BODY(self):
@asyncio.coroutine
def handler(request):
body = yield from request.read()
self.assertEqual(b'', body)
return web.Response(body=b'test', status=304)

@asyncio.coroutine
def go():
_, srv, url = yield from self.create_server('GET', '/', handler)
connector = aiohttp.TCPConnector(loop=self.loop)
r = yield from client.request('GET', url,
connector=connector, loop=self.loop)
content = yield from r.read()
self.assertEqual(r.status, 304)
self.assertEqual(content, b'')
r.release()
connector.close()

self.loop.run_until_complete(go())

0 comments on commit b95b88c

Please sign in to comment.