Skip to content

Response not passed to WSServerHandshakeError #2279

Open
@jeduden

Description

@jeduden

Long story short

As requested in comment on issue 701 opening a new issue

WSServerHandshakeError does not provide the actual HTTP Response body.
This means any error handling code, logging code cannot provide the error information that the server provides in the response body with the normal Client object.

In order to work around this issue we use a client like this to get access to the response:

class LoggingClientSession(aiohttp.ClientSession):
      @asyncio.coroutine
      def _request(self, method, url, **kwargs):
          self.last_response = yield from super()._request(method, url, **kwargs)
          return self.last_response

Expected behaviour

Provide the complete response object as a property in the error. This way any change to the interface of the standard response is propagated directly without additional code changes.

Actual behaviour

WSServerHandshakeError only forwards a subset of the response. See this code: https://github.com/aio-libs/aiohttp/blob/master/aiohttp/client.py#L434

Steps to reproduce

Connect to a websocket server that responds to an upgrade request with an error response with body.

Your environment

not relevant.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions