| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> httpx 与 异步 -> 正文阅读 |
|
[网络协议]httpx 与 异步 |
前言????????HTTPX 是新一代的 python 解析库,它是一个功能齐全的 HTTP 客户端,用于Python 3,较requests(只能发送同步请求)和 aiohttp(只能发送异步请求)不同的是,它同时提供同步和异步 API,有些网站强制使用 HTTP / 2.0 协议访问,urllib 和 requests 是无法爬取数据的,它们只支持?HTTP / 1.1,而 HTTPX 则全部支持。 ????????例如 HTTPX 官网(F12 打开开发人员工具界面 → 选择网络【Network】 → 右键点击名称选中协议【Protocol】即可查看网站支持的协议类型,h2 即为 HTTP / 2.0 协议): 官方文档:https://www.python-httpx.org/ Github:https://github.com/encode/httpx/ HTTPX 的特点
HTTPX 的安装HTTPX 所需版本为 Python 3.6 及以上,可通过以下命令安装:
但是如果想让 HTTPX 支持 HTTP / 2.0 的话,用如下命令安装:
以下即为成功: HTTPX 之 Client 对象????????在了解 httpx 如何使用前,先了解一下 httpx 的 Client 对象,httpx.Client() 相当于 requests.Session 的替代,相较于 httpx 的其他 API 方法,Client 能更有效地利用网络资源,Client 使用?http 连接池,这意味着,当向同一主机发出多个请求时,将重用底层 TCP 连接,而不是为每个请求重新创建一个新的连接,能显著的改善性能:
Client 的基本使用方法一:作为上下文管理器,较推荐方式
方法二:显示关闭连接池?
发送自定义请求头信息:
Client 可以通过将参数传递给构造函数来将配置应用于所有传出请求?:
更多详细用法可参考 Client 官方文档:https://www.python-httpx.org/advanced/ HTTPX 的使用发送同步请求?httpx 和 requests 的基本使用有很多相似之处,例如进行 GET 请求:
如图所示:"User-Agent": "python-httpx/0.22.0"?,即为使用 httpx 发送请求: 如下直接使用 httpx 访问 HTTP/2.0 的网站会出现报错:
报错信息:httpcore.ReadError: [WinError 10054] 远程主机强迫关闭了一个现有的连接。? 原因: httpx 默认不开启对 HTTP/2.0 的支持,默认使用的是 HTTP/1.0 需要手动声明一下才能使用 HTTP/2.0 ,这里就要使用到上述所讲的 httpx 的 Client 对象:
注意:在客户端的 httpx 上启用对 HTTP/2.0 的支持并不意味着请求和响应都将通过 HTTP/2.0 传输,这得客户端和服务端都支持 HTTP/2.0 才行,如果客户端连接到仅支持 HTTP/1.0 的服务器,那么它也需要改用 HTTP/1.0 。 发送异步请求? ? ? ? httpx 支持异步客户端请求,支持 Pyhton 的 async 请求模式,异步是一种并发模型,比多线程高效得多,可以提供显著的性能优势,并允许使用长期网络连接,如果使用的是异步 Web 框架,则还需要使用异步客户端发送传出 HTTP 请求,若要发送异步请求,需要使用到 httpx.AsyncClient() 方法: 官方文档给出的方式是:
但需要注意的是 async with xxx as xxx 这个结构需要放在 async def xxx( ) 函数内: 不然会报错:SyntaxError: 'async with' outside async function,显示语法错误
使用 HTTP/2.0 即更改为?httpx.AsyncClient(http2=True) 更多详细用法可参考 Client 官方文档:异步支持 - HTTPX (python-httpx.org) 异步????????为了完成某个任务,有时不同程序单元之间无需通信协调也能完成任务,此时不相关的程序单元之间可以是异步的,如爬取网页,调度程序调用下载程序后,即可调度其他任务,无需与该下载任务保持通信以协调行为,不同网页的下载、保存等操作都是无关的,也无须相互通知协调,这些异步操作完成的时刻不确定,所以异步也意味着无序执行。? 总结?? ? ? ? 以上为对新一代功能强大的解析库 HTTPX 的相关知识的基本归纳总结,同时引出了相关的异步概念,后续会对异步爬虫进行具体项目分析,有任何建议欢迎评论区指正交流~ |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/31 4:17:39- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |