IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 记录python httpx库的基本使用 -> 正文阅读

[网络协议]记录python httpx库的基本使用

详细注释记录在代码中。。。

# 文档地址https://www.python-httpx.org/
import httpx  # pip install httpx # pip install httpx[http2]
import asyncio
import time

# headers = {'user-agent': 'my-app/1.0.0'}
# params = {'key1': 'value1', 'key2': 'value2'}
# cookies = {'color': 'green'}
# url = 'https://httpbin.org/get'
# r = httpx.get(url, headers=headers, params=params, cookies=cookies, timeout=3)
# print(r)
# print(r.status_code)  # 状态码
# print(r.encoding)  # 文本编码
# print(r.headers)
# print(r.cookies)
# print(r.text)
# print(r.json())


"""
httpx提供了Client来解决以上问题,Client是基于HTTP连接池实现的,
这意味着当你对一个网站发送多次请求的时候,Client会保持原有的TCP连接,从而提升程序的执行效率。
"""
# with httpx.Client() as client:
#     headers = {'X-Custom': 'value'}
#     r = client.get('https://example.com', headers=headers)
#     print(r.text)

"""
我们可以将headers、cookies、params等参数放在http.Client()中,在Client下的请求共享这些配置参数
可以看出,r1的请求头包含{'x-auth': 'from-client'}, r2虽然配置了headers2,
但由于里面的headers1和headers2的参数不同,Client会合并这两个headers的参数作为一个新的headers
(如果参数相同,则headers2的参数会覆盖headers1的参数)。
"""
# headers1 = {'x-auth': 'from-client'}
# params1 = {'client_id': '1234'}
# url = 'https://example.com'
# with httpx.Client(headers=headers1, params=params1) as client:
#     headers2 = {'x-custom': 'from-request'}
#     params2 = {'request_id': '4321'}
#     r1 = client.get(url)
#     print(r1.request.headers)
#     r2 = client.get(url, headers=headers2, params=params2)
#     print(r2.request.headers)


"""
httpx可以通过设置proxies参数来使用http代理,我们也可以使用不同的代理来分别处理http和https协议的请求
httpx的代理参数proxies只能在httpx.Client()中添加,client.get()是没有这个参数的。
"""
# proxies = {
#     'http://': 'http://119.23.40.47:8080',  # 代理1
#     'https://': 'http://119.23.40.47:8080',  # 代理2
# }
# url = 'https://example.com'
# with httpx.Client(proxies=proxies) as client:
#     r1 = client.get(url)
#     print(r1)

"""
当请求https协议的链接时,发出的请求需要验证所请求主机的身份,因此需要SSL证书来取得服务器的信任后。
如果要使用自定义的CA证书,则可以使用verify参数
"""
# r = httpx.get("https://example.org", verify="path/to/client.pem")
# #  或者可以完全禁用SSL验证(不推荐)。
# r = httpx.get("https://example.org", verify=False)

"""
使用async/await语句来进行异步操作,创建一个httpx.AsyncClient()对象
"""
# async def main():
#     async with httpx.AsyncClient() as client:  # 创建一个异步client
#         r = await client.get('https://www.example.com/')
#         print(r)
#
# asyncio.run(main())

"""
检查 HTTP 版本
在客户端启用 HTTP/2 支持并不一定意味着您的请求和响应将通过 HTTP/2 传输,因为客户端 和服务器都需要支持 HTTP/2。
如果您连接到仅支持 HTTP/1.1 的服务器,则客户端将改为使用标准 HTTP/1.1 连接。
可以通过检查.http_version响应上的属性来确定使用了哪个版本的 HTTP 协议。
"""
# client = httpx.Client(http2=True)
# response = client.get("https://www.baidu.com/")
# print(response.http_version)  # "HTTP/1.0", "HTTP/1.1", or "HTTP/2".

"""
一个异步请求栗子
"""
async def req(client, i):
    res = await client.get('https://www.example.com')
    print(f'第{i + 1}次请求,status_code = {res.status_code}')
    return res


async def main():
    async with httpx.AsyncClient() as client:
        task_list = []  # 任务列表
        for i in range(300):
            res = req(client, i)
            task = asyncio.create_task(res)  # 创建任务
            task_list.append(task)
        await asyncio.gather(*task_list)  # 收集任务


if __name__ == '__main__':
    start = time.time()
    asyncio.run(main())
    end = time.time()
    print(f'异步发送300次请求,耗时:{end - start}')
	# 异步发送300次请求,耗时:3.747865915298462
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 13:28:51  更:2022-01-16 13:31:04 
 
开发: 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年10日历 -2024/10/5 9:22:48-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码