python中的httpx模块
qingheluo2022-01-21清河洛470
我们常用的网站访问库是requests,但是该库仅支持同步,在有些场景中就显得力不从心,现在有一个新的httpx库,同时支持同步和异步两种方式访问网络同步方式几乎和requests的使用方式完全相同,点击查看,以下我也列出来几点和requests不同的点响应流在requests中使用参数stream=True即可打开相应流,在httpx中将该参数改为stream()方法,在上下文中使用。除了第一个参数需要是定访问方法外,其他参数和正常访问相同,返回一个流对象close():由于使用的上下文,该方法很少使用
read():读取所有内容,既然使用了响应流,那么就不应该一次读取所有内容,所以很...
我们常用的网站访问库是requests,但是该库仅支持同步,在有些场景中就显得力不从心,现在有一个新的httpx库,同时支持同步和异步两种方式访问网络
同步方式几乎和requests的使用方式完全相同,点击查看,以下我也列出来几点和requests不同的点
响应流
在requests中使用参数stream=True即可打开相应流,在httpx中将该参数改为stream()方法,在上下文中使用。除了第一个参数需要是定访问方法外,其他参数和正常访问相同,返回一个流对象
close():由于使用的上下文,该方法很少使用 read():读取所有内容,既然使用了响应流,那么就不应该一次读取所有内容,所以很少使用 text(),json()等,必须使用一次read()方法才可用 ter_bytes(chunk_size=None):每次返回指定大小的二进制数据 iter_lines():每次返回一行数据,会先将数据转化为字符串,然后将所有换行转换为" ",返回的每一行结尾都是换行符 iter_text(chunk_size=None):每次返回指定大小的字符串数据 iter_raw(chunk_size=None):每次返回指定大小的原始数据,有些数据web服务器会自动解码,如gzip,如果我们不希望有任何额外操作就使用该方法 with httpx.stream(url) as req: for info in req.text(1024): print(info)
Cookies:
请求中的cookies1、通过cookies传递dict数据来发送cookies数据 2、通过Cookies对象传递 cookies = httpx.Cookies() cookies.set(key,val,domain='',path='/') httpx.get(url,cookies=cookies) Cookies对象的常用方法 clear(),keys(),values() delete(key,domain=None,path=None) set(key,val,domain='',path='/') pop(key, default):删除指定的键并返回改键键值,如果键不存在返回default,如不提供default则报错 popitem(key,val):删除符合的键值对 get(key,default=None,domain=None,path=None):当指定key不存在市返回default 也可以直接通过Cookies[key]来获取对应的键值 items():将Cookies对象中的键值对转换为二元元组</pre><h2>基本和摘要HTTP身份验证。</h2><pre>HTTPBasic认证 1、auth = httpx.BasicAuth("user","pwd") 2、auth = ("user","pwd") httpx.get(url, auth=auth)
HTTPDigest认证
auth = httpx.DigestAuth("user","pwd") httpx.get(url, auth=auth)</pre><h2>HTTPx的异步访问</h2><pre>步骤:
1、引入asyncio和httpx包
2、使用async关键字编写一个异步函数
3、异步函数中使用async关键字创建一个异步Client对象上下文
4、使用await关键字使用异步Client对象发送请求
5、后续等到获取到数据后的处理方式和同步相同import httpx
import asyncio
async def main():async with httpx.AsyncClient() as client: resp = await client.get(url) result = resp.json() print(result)
asyncio.run(main())