我们从Python开源项目中,提取了以下19个代码示例,用于说明如何使用aiohttp.ClientResponseError()。
def test_single_proxy(self, proxy): """ text one proxy, if valid, put them to usable_proxies. """ try: async with aiohttp.ClientSession() as session: try: if isinstance(proxy, bytes): proxy = proxy.decode('utf-8') real_proxy = 'http://' + proxy print('Testing', proxy) async with session.get(self.test_api, proxy=real_proxy, timeout=get_proxy_timeout) as response: if response.status == 200: self._conn.put(proxy) print('Valid proxy', proxy) except (ProxyConnectionError, TimeoutError, ValueError): print('Invalid proxy', proxy) except (ServerDisconnectedError, ClientResponseError,ClientConnectorError) as s: print(s) pass
def get_picture_urls(dates, verbose=False): semaphore = asyncio.Semaphore(MAX_CONCURRENT_REQUESTS) tasks = [get_picture_url(date, semaphore) for date in dates] urls = [] count = 0 # get results as jobs are done for job in asyncio.as_completed(tasks, timeout=GLOBAL_TIMEOUT): try: url = yield from job except NoPictureForDate as exc: if verbose: print('*** {!r} ***'.format(exc)) continue except aiohttp.ClientResponseError as exc: print('****** {!r} ******'.format(exc)) continue count += 1 if verbose: print(format(count, '3d'), end=' ') print(url.split('/')[-1]) else: print(url) urls.append(url) return urls
def stream_pty(self): request = Request('GET', '/stream/kernel/{}/pty'.format(self.kernel_id)) try: sess, ws = await request.connect_websocket() except aiohttp.ClientResponseError as e: raise BackendClientError(e.code, e.message) return StreamPty(self.kernel_id, sess, ws)
def test_stream_pty_raises_error_with_abnormal_status(mocker): mock_req_obj = asynctest.MagicMock(spec=Request) mock_exception = aiohttp.ClientResponseError( None, None, code=400, message='emulated-handshake-error') mock_req_obj.connect_websocket = \ asynctest.MagicMock(side_effect=mock_exception) with asynctest.patch('ai.backend.client.asyncio.kernel.Request', return_value=mock_req_obj) as mock_req_cls: with pytest.raises(BackendClientError): await Kernel('mykernel').stream_pty()
def tearDown(self): try: self.loop.run_until_complete(self.client.delete()) except aiohttp.ClientResponseError as exc: if exc.code != 404: raise self.loop.run_until_complete(self.client.close()) self.loop.close()
def test_checks_for_bad_response(self): self.response.status = 404 with self.assertRaises(ClientResponseError): await self.session.request('/')
def sendToTelegram(self): session = SessionManager.get() TELEGRAM_BASE_URL = "https://api.telegram.org/bot{token}/sendVenue".format(token=conf.TELEGRAM_BOT_TOKEN) title = self.name try: minutes, seconds = divmod(self.tth, 60) description = 'Expires at: {} ({:.0f}m{:.0f}s left)'.format(self.expire_time, minutes, seconds) except AttributeError: description = "It'll expire between {} & {}.".format(self.min_expire_time, self.max_expire_time) try: title += ' ({}/{}/{})'.format(self.attack, self.defense, self.stamina) except AttributeError: pass payload = { 'chat_id': conf.TELEGRAM_CHAT_ID, 'latitude': self.coordinates[0], 'longitude': self.coordinates[1], 'title' : title, 'address' : description, } try: async with session.post(TELEGRAM_BASE_URL, data=payload) as resp: self.log.info('Sent a Telegram notification about {}.', self.name) return True except ClientResponseError as e: self.log.error('Error {} from Telegram: {}', e.code, e.message) except ClientError as e: self.log.error('{} during Telegram notification.', e.__class__.__name__) except CancelledError: raise except Exception: self.log.exception('Exception caught in Telegram notification.') return False
def hook_post(self, w, session, payload, headers={'content-type': 'application/json'}): try: async with session.post(w, json=payload, timeout=4, headers=headers) as resp: return True except ClientResponseError as e: self.log.error('Error {} from webook {}: {}', e.code, w, e.message) except (TimeoutError, ServerTimeoutError): self.log.error('Response timeout from webhook: {}', w) except ClientError as e: self.log.error('{} on webhook: {}', e.__class__.__name__, w) except CancelledError: raise except Exception: self.log.exception('Error from webhook: {}', w) return False
def process_normally(self, message: RawRequestMessage, payload) -> aiohttp.Response: """Process request normally.""" req_data = payload if not isinstance(payload, EmptyStreamReader) else None # Request from a host. try: async with aiohttp.ClientSession(headers=message.headers, loop=self._loop) as session: async with session.request(message.method, message.path, data=req_data, allow_redirects=False) as host_resp: # type: aiohttp.ClientResponse client_res = aiohttp.Response( self.writer, host_resp.status, http_version=message.version) # Process host response headers. for name, value in host_resp.headers.items(): if name == hdrs.CONTENT_ENCODING: continue if name == hdrs.CONTENT_LENGTH: continue if name == hdrs.TRANSFER_ENCODING: if value.lower() == 'chunked': client_res.enable_chunked_encoding() client_res.add_header(name, value) # Send headers to the client. client_res.send_headers() # Send a payload. while True: chunk = await host_resp.content.read(self._chunk_size) if not chunk: break client_res.write(chunk) if client_res.chunked or client_res.autochunked(): await client_res.write_eof() return client_res except aiohttp.ClientResponseError: self.log_debug("CANCELLED {!s} {!r}.".format(message.method, message.path)) raise
def _mal_fetch(session, kind, query, username, password): """Returns a bs4 tag or a string. session is an aiohttp.ClientSession kind should be either anime or manga query is self-explanatory username is self-explanatory password is self-explanatory """ auth = aiohttp.BasicAuth(username, password) query = urllib.parse.quote(query) url = BASE_URL_MYANIMELIST_SEARCH.format(kind, query) try: # This is gross, but MAL doesn't respond nicely. async with session.request("GET", url, auth=auth) as response: if response.status == 200: xml = await response.text() soup = BeautifulSoup(xml) entry = soup.find("entry") return entry else: message = "Could not reach MyAnimeList. x.x" return message except aiohttp.ClientResponseError: message = ("No results found. Make sure you use spaces (e.g. " "`one piece`, not `onepiece`). Also make sure to spell things right.") return message
def fetch(self, url, retry=3): '''?? URL?????? HTML ??''' try: start_time = self.loop.time() response = await aiohttp.request('GET', url) time_used = self.loop.time() - start_time except (TimeoutError, aiohttp.ClientResponseError) as e: # ?? if retry > 0: retry -= 1 await asyncio.sleep(1) return await self.fetch(url, retry) else: time_used = self.loop.time() - start_time logger.error('USE %6.3f s STAT: 500 URL: %s (%s)' % (time_used, url, e)) return '' except Exception as e: time_used = self.loop.time() - start_time logger.error('USE %6.3f s STAT: 500 URL: %s (%s)' % (time_used, url, e)) return '' if not (200 <= response.status < 300): logger.error('USE %6.3f s STAT: %s URL: %s' % (time_used, response.status, url)) # ?? html ?????? body = await response.read() try: return body.decode('utf-8') except UnicodeDecodeError: try: return body.decode('gbk') except UnicodeDecodeError: return body
def __post(self, data): with aiohttp.Timeout(self.timeout, loop=self.loop): try: response = await self.__session.post(str(self.__url), data=data, headers=self.__headers) except aiohttp.ClientError as e: log.debug('Caught during POST request: %r', e) raise ConnectionError(str(self.url)) else: if response.status == CSRF_ERROR_CODE: # Send request again with CSRF header self.__headers[CSRF_HEADER] = response.headers[CSRF_HEADER] log.debug('Setting CSRF header: %s = %s', CSRF_HEADER, response.headers[CSRF_HEADER]) await response.release() return await self.__post(data) elif response.status == AUTH_ERROR_CODE: await response.release() log.debug('Authentication failed') raise AuthError(str(self.url)) else: try: answer = await response.json() except aiohttp.ClientResponseError as e: text = textwrap.shorten(await response.text(), 50, placeholder='...') raise RPCError('Server sent malformed JSON: {}'.format(text)) else: return answer
def _local_request(self, method, uri, cookies=None, *args, **kwargs): if self._loop is None: self._loop = asyncio.get_event_loop() if uri.startswith(('http:', 'https:', 'ftp:', 'ftps://' '//')): url = uri else: url = 'http://{host}:{port}{uri}'.format( host=HOST, port=PORT, uri=uri) conn = DelayableTCPConnector(pre_request_delay=self._request_delay, verify_ssl=False, loop=self._loop) async with aiohttp.ClientSession(cookies=cookies, connector=conn, loop=self._loop) as session: # Insert a delay after creating the connection # But before sending the request. async with getattr(session, method.lower())( url, *args, **kwargs) as response: try: response.text = await response.text() except UnicodeDecodeError: response.text = None try: response.json = await response.json() except (JSONDecodeError, UnicodeDecodeError, aiohttp.ClientResponseError): response.json = None response.body = await response.read() return response
def _local_request(self, method, uri, cookies=None, *args, **kwargs): import aiohttp if uri.startswith(('http:', 'https:', 'ftp:', 'ftps://' '//')): url = uri else: url = 'http://{host}:{port}{uri}'.format( host=HOST, port=self.port, uri=uri) logger.info(url) conn = aiohttp.TCPConnector(verify_ssl=False) async with aiohttp.ClientSession( cookies=cookies, connector=conn) as session: async with getattr( session, method.lower())(url, *args, **kwargs) as response: try: response.text = await response.text() except UnicodeDecodeError as e: response.text = None try: response.json = await response.json() except (JSONDecodeError, UnicodeDecodeError, aiohttp.ClientResponseError): response.json = None response.body = await response.read() return response
def send_message(self, payload): payload['disable_notification'] = True try: resp = await self.session.post(self._get_uri('sendMessage'), data=payload) result = await self._raise_for_response(resp) log.info("sent: %s", result) except aiohttp.ClientResponseError as ex: log.error("Message send failed %s", ex, exc_info=True)
def send_photo(self, payload): payload['disable_notification'] = True try: resp = await self.session.post(self._get_uri('sendPhoto'), data=payload) result = await self._raise_for_response(resp) log.info("sent: %s", result) except aiohttp.ClientResponseError as ex: log.error("Message send failed %s", ex, exc_info=True)
def get_file(self, file_id): try: resp = await self.session.get(self._get_uri('getFile'), params={'file_id': file_id}) result = await self._raise_for_response(resp) log.info("File: %s", result) except aiohttp.ClientResponseError as ex: log.error("Failed to retreive file: %s", ex, exc_info=True) return None return result
def get_data(self, category, name): try: with aiohttp.ClientSession(auth=self.auth,headers=self.header) as session: async with session.get('https://myanimelist.net/api/{}/search.xml?q={}'.format(category, name),headers=self.header) as resp: return (await resp.read()) except aiohttp.ClientResponseError: # some reason, mal dont return API, just nothing... causing error return None
def _local_request(self, method, uri, cookies=None, *args, **kwargs): request_keepalive = kwargs.pop('request_keepalive', Config.KEEP_ALIVE_TIMEOUT) if uri.startswith(('http:', 'https:', 'ftp:', 'ftps://' '//')): url = uri else: url = 'http://{host}:{port}{uri}'.format( host=HOST, port=PORT, uri=uri) do_kill_session = kwargs.pop('end_session', False) if self._session: session = self._session else: if self._tcp_connector: conn = self._tcp_connector else: conn = ReuseableTCPConnector(verify_ssl=False, loop=self._loop, keepalive_timeout= request_keepalive) self._tcp_connector = conn session = aiohttp.ClientSession(cookies=cookies, connector=conn, loop=self._loop) self._session = session async with getattr(session, method.lower())( url, *args, **kwargs) as response: try: response.text = await response.text() except UnicodeDecodeError: response.text = None try: response.json = await response.json() except (JSONDecodeError, UnicodeDecodeError, aiohttp.ClientResponseError): response.json = None response.body = await response.read() if do_kill_session: session.close() self._session = None return response