注册 登录

清河洛

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:

请求中的cookies
1、通过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(&quot;user&quot;,&quot;pwd&quot;)
2、auth = (&quot;user&quot;,&quot;pwd&quot;)
httpx.get(url, auth=auth)

HTTPDigest认证

auth = httpx.DigestAuth(&quot;user&quot;,&quot;pwd&quot;)
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())



网址导航