Пример #1
0
 def raise_for_status(self):
     """Raises stored :class:`HTTPError` or :class:`URLError`, if occurred.
     """
     if self.is_error:
         if self.status_code:
             raise HttpRequestException(response=self)
         else:
             raise HttpConnectionError(response=self)
Пример #2
0
    async def _request(self, method, url, **params):
        nparams = params.copy()
        nparams.update(((name, getattr(self, name))
                        for name in self.request_parameters
                        if name not in params))
        request = HttpRequest(self, url, method, params, **nparams)
        pool = self.connection_pools.get(request.key)
        if pool is None:
            host, port = request.address
            connector = partial(self.create_connection, (host, port),
                                ssl=request.ssl)
            pool = self.connection_pool(connector,
                                        pool_size=self.pool_size,
                                        loop=self._loop)
            self.connection_pools[request.key] = pool
        try:
            conn = await pool.connect()
        except BaseSSLError as e:
            raise SSLError(str(e), response=self) from None
        except ConnectionRefusedError as e:
            raise HttpConnectionError(str(e), response=self) from None

        with conn:
            try:
                response = await start_request(request, conn)
                headers = response.headers
            except AbortRequest:
                response = None
                headers = None

            if (not headers
                    or not keep_alive(response.request.version, headers)
                    or response.status_code == 101 or
                    # if response is done stream is not relevant
                    response.request.stream and not response.done()
                    or self.close_connections):
                conn.detach()

        # Handle a possible redirect
        if response and isinstance(response.request_again, tuple):
            method, url, params = response.request_again
            response = await self._request(method, url, **params)
        return response