Pytho的HTTP交互httpx包模块使用详解
作者:Moshe 发布时间:2022-11-17 06:03:29
Python 的 httpx
包是一个复杂的 Web 客户端。当你安装它后,你就可以用它来从网站上获取数据。像往常一样,安装它的最简单方法是使用 pip
工具:
$ python -m pip install httpx --user
要使用它,把它导入到 Python 脚本中,然后使用 .get
函数从一个 web 地址获取数据:
import httpx
result = httpx.get("https://httpbin.org/get?hello=world")
result.json()["args"]
下面是这个简单脚本的输出:
{'hello': 'world'}
HTTP 响应
默认情况下,httpx
不会在非 200 状态下引发错误。
试试这个代码:
result = httpx.get("https://httpbin.org/status/404")
result
结果是:
<Response [404 NOT FOUND]>
可以明确地返回一个响应。添加这个异常处理:
try:
result.raise_for_status()
except Exception as exc:
print("woops", exc)
下面是结果:
woops Client error '404 NOT FOUND' for url 'https://httpbin.org/status/404'
For more information check: https://httpstatuses.com/404
自定义客户端
除了最简单的脚本之外,使用一个自定义的客户端是有意义的。除了不错的性能改进,比如连接池,这也是一个配置客户端的好地方。
例如, 你可以设置一个自定义的基本 URL:
client = httpx.Client(base_url="https://httpbin.org")
result = client.get("/get?source=custom-client")
result.json()["args"]
输出示例:
{'source': 'custom-client'}
这对用客户端与一个特定的服务器对话的典型场景很有用。例如,使用 base_url
和 auth
,你可以为认证的客户端建立一个漂亮的抽象:
client = httpx.Client(
base_url="https://httpbin.org",
auth=("good_person", "secret_password"),
)
result = client.get("/basic-auth/good_person/secret_password")
result.json()
输出:
{'authenticated': True, 'user': 'good_person'}
你可以用它来做一件更棒的事情,就是在顶层的 “主” 函数中构建客户端,然后把它传递给其他函数。这可以让其他函数使用客户端,并让它们与连接到本地 WSGI 应用的客户端进行单元测试。
def get_user_name(client):
result = client.get("/basic-auth/good_person/secret_password")
return result.json()["user"]
get_user_name(client)
'good_person'
def application(environ, start_response):
start_response('200 OK', [('Content-Type', 'application/json')])
return [b'{"user": "pretty_good_person"}']
fake_client = httpx.Client(app=application, base_url="https://fake-server")
get_user_name(fake_client)
输出:
'pretty_good_person'
尝试 httpx
请访问 python-httpx.org 了解更多信息、文档和教程。我发现它是一个与 HTTP 交互的优秀而灵活的模块。试一试,看看它能为你做什么。
via: https://opensource.com/article/22/3/python-httpx
来源:https://linux.cn/article-14353-1.html


猜你喜欢
- 本文实例为大家分享了python批量读取文件名并写入txt中的具体代码,供大家参考,具体内容如下先说下脚本使用的环境吧,在做项目的过程中需要
- 线程和进程1、线程共享创建它的进程的地址空间,进程有自己的地址空间2、线程可以访问进程所有的数据,线程可以相互访问3、线程之间的数据是独立的
- 当用户首次安装MySQL数据库时,总是想修改root的初始化密码,我也是,每次都百度一下,下面主要给出一些操作数据库的常用SQL和一些基本概
- Go 语言相比Java等一个很大的优势就是可以方便地编写并发程序。Go 语言内置了 goroutine 机制,使用goroutine可以快速
- 有时候你会发现Django数据库API带给你的也只有这么多,那你可以为你的数据库写一些自定义SQL查询。 你可以通过导入django.db.
- 当需要定时修改数据库时,一般我们都选择起一个定时进程去改库。如果将这种定时任务写入业务中,写成一个接口呢,定时进程显得有些不太合适?如果需要
- 本文为大家分享了Navicat for SQLite导入csv中文数据的具体方法,供大家参考,具体内容如下1.用Notepad++打开csv
- 本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下:官方文档 – https://docs.opencv.or
- http请求介绍HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTT
- 一、使用MySql进行持久化存储在任何应用中,都需要持久化存储。一般有 3 种基础的存储机制:文件、数据库系统以及一些混合类型。这种混合类型
- 添加jar包 官网下载jar包idea导入jar包:检查官网下载jar包官网地址:MySQL :: Download Connec
- 1. grpc开源包的安装# conda$ conda create -n grpc_env python=3.9# install grp
- 安装顺序rpm -ivhmysql-community-common-5.7.18-1.el7.x86_64.rpmmysql-commun
- 一、需要识别的内容需要识别的验证码内容如下 验证码下载下载地址。二、直接调用tesseract来完成识别(识别率很差)
- 1 获取当前完整时间1.1 now()函数select now();输出:2023-02-15 10:46:171.2 sysdate()函
- Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes
- 第一种打开PyCharm, 然后PyCharm -> Preferences -> 在搜索框中输入Project Interpr
- 安装报错类型,解决方案;1. 数据库连接报错mysqldb只支持python2,pymysql支持3,都是使用c写的驱动,性能更好# dja
- 本文实例讲述了js显示动态时间的方法。分享给大家供大家参考,具体如下:Date对象的方法Date 对象能够使你获得相对于国际标准时间(格林威
- 网页采用了 UTF-8 编码格式,这本来没有问题,问题是外部 CSS 文件默认是 ANSI