我正在使用带有requests模块的asyncio来发出异步 HTTP 请求。
我可以发出这样的 GET 请求:
@asyncio.coroutine
def do_checks():
loop = asyncio.get_event_loop()
req = loop.run_in_executor(None, requests.get, 'https://api.github.com/user')
resp = yield from req
print(resp.status_code)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_checks())
但是,我需要在请求中支持 Basic HTTP Auth(在此处描述)。
根据文档,url和auth都是 requests.get() 的命名参数。
但是,如果我运行它(注意添加url=''和auth = ''):
@asyncio.coroutine
def do_checks():
loop = asyncio.get_event_loop()
req = loop.run_in_executor(None, requests.get, url='https://api.github.com/user', auth=HTTPBasicAuth('user', 'pass'))
resp = yield from req
print(resp.status_code)
loop = asyncio.get_event_loop()
loop.run_until_complete(do_checks())
我收到此错误:
TypeError: run_in_executor() got an unexpected keyword argument 'url'
在 asyncio.run_in_executor() 的原型中,支持附加参数:
BaseEventLoop.run_in_executor(executor, callback, *args)
requests.get() 明确支持命名参数(get、auth 等)。怎么了?