轻量级python http客户端

lowhaio的Python项目详细描述


低海CircleCITest Coverage

轻量级python异步http/1.1客户端。不创建其他任务;所有代码都在一个模块中;除了标准库之外,只需要一个依赖项,aiodnsresolver

lowhaio有一个故意限制的范围:它包含的代码足够成为一个有用的http客户端,并且允许在需要时在顶部添加更复杂的行为。

连接是DNS感知的,因为它们只在与域的当前A记录匹配时才被重用。

安装

pip install lowhaio

用法

api首先是流:对于请求和响应主体,都使用异步迭代器。

importasynciofromlowhaioimportPoolasyncdefmain():request,close=Pool()asyncdefrequest_body():yieldb'a'yieldb'bc'code,headers,response_body=awaitrequest(b'POST','https://postman-echo.com/post',headers=((b'content-length',b'3'),(b'content-type',b'text/plain'),),body=request_body,)asyncforchunkinresponse_body:print(chunk)awaitclose()loop=asyncio.get_event_loop()loop.run_until_complete(main())

但是,如果不需要或不可能,则有助手函数streamedbuffered

importasynciofromlowhaioimportPool,streamed,bufferedasyncdefmain():request,close=Pool()request_body=streamed(b'abc')code,headers,response_body=awaitrequest(b'POST','https://postman-echo.com/post',headers=((b'content-length',b'3'),(b'content-type',b'text/plain'),),body=request_body,)print(awaitbuffered(response_body))awaitclose()loop=asyncio.get_event_loop()loop.run_until_complete(main())

标题

自动添加到请求中的唯一头是host头,它是来自请求的url的idna/punycode编码域名。

例外情况

例外情况通常是HttpError的子类。如果是较低级别的异常导致了这种情况,那么它将在HttpError__cause__属性中设置。具体来说,在发送任何数据之前,引发HttpConnectionError,在发送数据之后,引发HttpDataError。这一区别是为了能够知道是否可以重试非等幂请求。

但是,允许asyncio.CancelledError和不从Exception发出指令的异常(例如SystemExit)冒泡。

自定义SSL上下文

lowhaio可以通过get_ssl_context参数到Pool与自定义ssl上下文一起使用。例如,要使用certifi ca bundle,可以通过

pip install certifi

使用如下。

importasyncioimportsslimportcertififromlowhaioimportPool,buffered,streamedasyncdefmain():request,close=Pool(get_ssl_context=lambda:ssl.create_default_context(cafile=certifi.where()),)request_body=streamed(b'abc')code,headers,response_body=awaitrequest(b'POST','https://postman-echo.com/post',headers=((b'content-length',b'3'),(b'content-type',b'text/plain'),),body=request_body,)print(awaitbuffered(response_body))awaitclose()loop=asyncio.get_event_loop()loop.run_until_complete(main())

范围

核心功能的范围仅限于:

  • (TLS)连接打开、关闭和池化;
  • 传递和接收http头和流媒体体;
  • 解码分块响应;
  • 在超时时引发异常。

这是为了使核心行为在合理的使用范围内有用,但是not包含可以由顶层添加的内容。特别不包括:

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

推荐PyPI第三方库


热门话题
java Spring引导在打包为jar时在数据库中找不到实体   多线程在Java 1.3中实现UncaughtExceptionHandler   pdf pdfbox 2.0 xfa使用java填充字段   用indexof计算单词   java hadoop inputFile作为缓冲区映像   java如何创建自定义gridview,如图所示   java一次在字符串中搜索多个字母   Java递归的一般概念   python使用endpointscfg生成java客户端库。皮耶?   用于组装分散数据的java设计模式?   JavaXMLRPC:如何使过程调用可以访问登录凭据?   如何在Java中找到多个集合的所有交集的列表?   java IE8丢失会话详细信息   JSF格式中可以为null的java属性   如何在java中使用split()标记字符串?   Linux上的java JFreeChart没有X AWTError:无法连接到X11窗口服务器   java文本区域javaFx颜色   java什么更有效:排序流还是排序列表?   java css风格的十六进制字符串和颜色。解码   java无法在onTouch事件中更新新位置