异步等待对“请求”的支持。

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库中。

Build StatusCoveragePackage version

要求

  • 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():...

方法签名与标准的requestsapi相同:

  • 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应用程序的测试客户机。

您可能需要安装pytestpytest-asyncio,或者 相当于,允许您编写async测试用例。

fromrequests_asyncimportASGISessionfrommyprojectimportappimportpytest@pytest.mark.asyncioasyncdeftest_homepage():client=ASGISession(app)response=awaitclient.get("/")assertresponse.status_code==200

备选方案

  • 带有请求兼容api的同步和异步http客户端。
  • ^{} package提供了一个用于生成异步http请求的替代客户端。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java OpenShift的齿轮特性   java如何在Liferay站点的每个页面上放置公司地址和电话?   java确定整数数组中是否存在一个子集,在两个条件下求和到给定的目标值   序列化为什么java中的serialVersionUID必须是静态的、最终的、长类型的?   java响应返回null   java注入接口实现Quarkus   java我不明白为什么第二次排序的运行时间比第一次慢?   (Java)显示图像的最佳方式?   java Android应用程序因添加布局而崩溃   java如何在运行时获取泛型变量的类   java Selenium web驱动程序:无效的选择器:*:WebKitFullScreenSentor   Spring中的java注入值始终为空   Eclipse中带有TestNG插件的@BeforeSuite和@AfterSuite的java问题   使用trycatch块、filewriter和printwriter在java中创建自定义类   如何在Java 安卓上绘制相交的两条线