首页 > 其他分享 >httpx库的使用

httpx库的使用

时间:2022-12-08 22:34:28浏览次数:51  
标签:get url res headers 使用 print httpx

针对某些网站使用HTTP/2.0协议,requests库是无法抓取数据的,这时就需要使用支持HTTP2.0的请求库,比如httpx

一、安装

pip3 install httpx

二、常规API

import httpx

url = 'http://www.httpbin.org/get'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
}

res = httpx.get(url, headers=headers)

print(res.status_code)  # 状态码
print(res.text) # 响应体文本内容
print(res.content) # 响应体二进制内容
print(res.json()) # 将Json文本转换为dict类型
print(res.headers) # 响应头,是Headers对象,可像字典一样操作,比如:res.headers.get('content-type')
print(res.http_version)  # httpx所特有的api,返回协议版本,比如:HTTP/1.1

三、Client对象

  • httpx默认使用的是HTTP/1.1,要想支持HTTP/2.0,需要声明Client对象,并显示地将http2参数设置为True
  • 在声明Client对象时,还可以指定一些参数,比如headers,这样使用该对象所发起的所有请求都会默认携带这些参数配置
  • 示例(https://spa16.scrape.center/,该网站协议均采用的h2,使用requests会报错)
    import httpx
    
    url = 'https://spa16.scrape.center/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
    }
    
    with httpx.Client(http2=True, headers=headers) as client:
        res = client.get(url)
        print(res.status_code) # 200
        print(res.http_version) # HTTP/2
        print(res.text) # 正常响应的文本内容

四、AsyncClient对象

  • httpx还支持异步请求客户端,支持Python的async请求模式,需要使用AsyncClient对象
    import asyncio
    import httpx
    
    url = 'https://spa16.scrape.center/'
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36'
    }
    
    async def fetch(url):
        async with httpx.AsyncClient(http2=True, headers=headers) as client:
            res = await client.get(url)
            print(res.status_code)  # 200
            print(res.http_version)  # HTTP/2
            print(res.text)  # 正常响应的文本内容
    
    asyncio.get_event_loop().run_until_complete(fetch(url))

     

标签:get,url,res,headers,使用,print,httpx
From: https://www.cnblogs.com/eliwang/p/16967598.html

相关文章

  • Tiflash的使用介绍
    1、创建一个products表mysql>CREATETABLEproducts(->idINTPRIMARYKEYAUTO_INCREMENT,->product_nameVARCHAR(100),->priceDEC......
  • django框架——简介、基本使用、django app的概念、主要目录结构、“三板斧”
    django框架——简介、基本使用、djangoapp的概念、主要目录结构、“三板斧”一、django简介1.版本问题django1.X:同步 1.11django2.X:同步 2.2......
  • 你的项目使用Optional了吗?
    1.基本概念java.util.Optional<T>类本质上就是一个容器,该容器的数值可以是空代表一个值不存在,也可以是非空代表一个值存在。 2.获取对象2.1相关方法2.2案例详......
  • php使用websocket示例详解
    下面我画了一个图演示client和server之间建立websocket连接时握手部分,这个部分在node中可以十分轻松的完成,因为node提供的net模块已经对socket套接字做了封装......
  • python中if的使用
    布尔类型的学习:bool_1=Truebool_2=Falseprint(f"bool_1变量的内容是:{bool_1},数据类型是{type(bool_1)}")print(f"bool_2变量的内容是:{bool_2},数据类型是{type(bool_2)......
  • drf安装和简单使用
    drf安装和简单使用目录drf安装和简单使用1、安装2、使用3、postman测试1、安装#安装pipinstalldjangorestframework2、使用1.settings.py中INSTALLED_AP......
  • OpenCV入门(C++/Python)- 使用OpenCV调整尺寸大小(三)
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • 跨进程通信(socket,binder,handler),Binder ,linkToDeathAIDL,Bundle,使用Socket
    目录   ​​一、IPC简介​​​​二、Android中的多进程模式​​​​三、IPC基础概念介绍​​​​1、Serializable接口​​​​2、Parcelable接口​​​​3、Parcelable接......
  • Django框架的推导下载基本使用
    目录Django框架一、django框架的推导1.纯手写web框架2.基于wsgire模块3.代码封装优化4.jinja2模板语法5.前端后端数据库三者联动6.动静态页面二、django框架详细1.python......
  • django 下载使用教程 三板斧
    djangopython主流web框架#django 大而全自带的功能非常的多但是有时候会略显笨重类似于'航空母舰'#flask 小而精自带的功能非常的少但是第三方模块非常的多......