异步等待对“请求”的支持。
requests-async的Python项目详细描述
此工作已被http3
项目取代:https://www.encode.io/http3/
我们现在建议使用http3.AsyncClient()
来支持与请求兼容的api的异步/等待。
note:使用ipython
从控制台尝试此操作,因为它支持await
。
>>>importhttp3>>>client=http3.AsyncClient()>>>r=awaitclient.get('https://www.example.org/')>>>r.status_code200>>>r.text'<!doctype html>\n<html>\n<head>\n<title>Example Domain</title>...'
异步请求
将对async
/await
语法的支持引入到python令人难以置信的requests
库中。
要求
- Python3.6+
安装
$ pip install requests-async
用法
只需使用标准请求api,但使用await
发出请求。
note:使用ipython
从控制台尝试此操作,因为它支持await
。
importrequests_asyncasrequestsresponse=awaitrequests.get('https://example.org')print(response.status_code)print(response.text)
或者使用显式会话,使用异步上下文管理器。
importrequests_asyncasrequestsasyncwithrequests.Session()assession:response=awaitsession.get('https://example.org')print(response.status_code)print(response.text)
requests_async
包子类requests
,因此您将得到
标准行为和api。
流式响应和请求
iter_content()
和iter_lines()
方法是异步迭代器。
response=awaitrequests.get('https://example.org',stream=True)asyncforchunkinresponse.iter_content():...
方法签名与标准的requests
api相同:
iter_content(chunk_size=1, decode_unicode=False)
iter_lines(chunk_size=512, decode_unicode=False, delimiter=None)
如果设置了decode_unicode
,并且响应包括
一种编码。否则方法将产生字节。
您还可以流式处理请求主体。为此,应该使用异步 生成字节的生成器。
asyncdefstream_body():...response=awaitrequests.post('https://example.org',data=stream_body())
模拟请求
在某些情况下,例如在测试web应用程序时,可以 不希望发出实际的传出网络请求,但希望 以模拟端点。
您可以使用ASGISession
来完成此操作,它允许您插入
任何asgi应用程序,而不是发出实际的网络请求。
importrequests_async# Create a mock service, with Starlette, Responder, Quart, FastAPI, Bocadillo,# or any other ASGI web framework.mock_app=...ifTESTING:# Issue requests to the mocked application.requests=requests_async.ASGISession(mock_app)else:# Make live network requests.requests=requests_async.Session()
测试客户端
您还可以将ASGISession
用作任何asgi应用程序的测试客户机。
您可能需要安装pytest
和pytest-asyncio
,或者
相当于,允许您编写async
测试用例。
fromrequests_asyncimportASGISessionfrommyprojectimportappimportpytest@pytest.mark.asyncioasyncdeftest_homepage():client=ASGISession(app)response=awaitclient.get("/")assertresponse.status_code==200
备选方案
- 带有请求兼容api的同步和异步http客户端。
- ^{
} package 提供了一个用于生成异步http请求的替代客户端。