1、前言
在使用 Python 进行接口自动化时,大多数都会使用 requests 模块,requests 是一个常用的 HTTP 请求库,可以方便地向网站发送 HTTP 请求,并获取响应结果。
本篇将介绍 Python 的下一代 HTTP 客户端 - HTTPX
2、简介
HTTPX - 用于 Python 的下一代 HTTP 客户端。
HTTPX 是 Python 3 的一个功能齐全的 HTTP 客户端,它提供同步和异步 API,并支持 HTTP/1.1 和 HTTP/2。
功能:
果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386
【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337
1、HTTPX 建立在完善的请求可用性之上,并为您提供:
(1)广泛兼容请求的 API。
(2)标准同步接口,但如果需要,可以支持异步。
(3)HTTP/1.1 和 HTTP/2 的支持。
(4)能够直接向 WSGI 应用程序或 ASGI 应用程序发出请求。
(5)到处都有严格的超时。
(6)完全键入注释。
(7)100%测试覆盖率。
2、请求的所有标准功能:
(1)国际域名 和 URL
(2)保持活动连接池
(3)具有 Cookie 持久性的会话
(4)浏览器式 SSL 验证
(5)基本/摘要式 身份验证
(6)优雅的 键/值 Cookie
(7)自动解压缩
(8)自动内容解码
(9)Unicode 响应体
(10)多部分文件上传
(11)支持 HTTP(S) 代理
(12)连接超时
(13)流媒体下载
(14)支持 .netrc
(15)分块请求
官方网址:
https://www.python-httpx.org/
github地址:
https://github.com/encode/httpx/
安装:
1、使用 pip 安装 HTTPX
pip install httpx
2、使用 pip 安装 HTTPX(支持可选的 HTTP/2)
pip install httpx[http2]
3、使用 pip 安装 HTTPX(支持可选的 brotli 解码器)
pip install httpx[brotli]
4、使用 pip 安装 HTTPX 的命令行客户端(是一个可选的依赖项)
pip install 'httpx[cli]'
打开命令行可直接使用 HTTPX。
3、快速上手
1、GET 请求:
(1)代码请求:
使用 Postman 请求。
使用 HTTPX 请求。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
r = httpx.get('https://httpbin.org/get')
print(r)
print(r.status_code)
print(r.headers['content-type'])
print(r.text)
返回结果。
(2)命令行请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
url = 'https://httpbin.org/get'
params = {'key1': 'value1', 'key2': 'value2'}
headers = {'user-agent': 'my-app/0.0.1'}
r = httpx.get(url, params=params, headers=headers)
print(r.text)
返回结果。
3、POST+JSON+Headers 请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
url = 'https://httpbin.org/post'
data = {'integer': 123456, 'boolean': True, 'list': ['a', 'b', 'c', 'd']}
headers = {'Content-Type': 'application/json'}
r = httpx.post(url, json=data, headers=headers)
print(r.text)
返回结果。
4、POST+Form表单 请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
url = 'https://httpbin.org/post'
data = {'key1': 'value1', 'key2': 'value2'}
r = httpx.post(url, data=data)
print(r.text)
返回结果。
5、POST+文件 请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
url = 'https://httpbin.org/post'
data = {'message': 'AllTests软件测试'}
files = {'file': open('/Users/wangmeng/Desktop/test.xlsx', 'rb')}
r = httpx.post(url, data=data, files=files)
print(r.text)
返回结果。
6、超时 请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
r = httpx.get('https://httpbin.org/get', timeout=10)
print(r.text)
7、PUT、DELETE、HEAD和OPTIONS 请求:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
r = httpx.put('https://httpbin.org/put', data={'key1': 'value1'})
r = httpx.delete('https://httpbin.org/delete')
r = httpx.head('https://httpbin.org/get')
r = httpx.options('https://httpbin.org/get')
8、异步 请求:
要进行异步请求,需要一个 AsyncClient。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import httpx
import asyncio
async def demo():
async with httpx.AsyncClient() as client:
r = await client.get('https://httpbin.org/get')
print(r.text)
asyncio.run(demo())
返回结果。
异步请求内容:
AsyncClient.get(url, ...)
AsyncClient.options(url, ...)
AsyncClient.head(url, ...)
AsyncClient.post(url, ...)
AsyncClient.put(url, ...)
AsyncClient.patch(url, ...)
AsyncClient.delete(url, ...)
AsyncClient.request(method, url, ...)
AsyncClient.send(request, ...)