栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

httpx的使用

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

httpx的使用

httpx的使用

文章目录
  • httpx的使用
    • 前言
    • HTTP2和HTTP1.1的区别
    • httpx的安装
    • 基本使用
    • Client对象
    • 异步请求
    • 最后我想说

前言

前面介绍的urllib库和requests库的使用,已经可以应对大多数的情况,但是有一些的网站它是强制使用HTTP/2.0协议访问的,这个时候前面两个库是不支持HTTP/2.0的,这个时候就需要用到支持这个协议的库来爬取网页了,其中httpx具有代表性,也更方便。

HTTP2和HTTP1.1的区别

谈到这里,我来简单的说一下2和1.1的一些主要区别,想知道更多的可以自行上网去查阅。

从技术角度来看,两者最大的区别就是二进制框架层,其中http1.1把所有的请求和响应作为纯文本,而http2是把所有的消息封装成二进制,且仍然保持http语法,http2比http1.1传输信息更加灵活。

httpx的安装

httpx的安装可以直接使用pip工具安装,但是需要Python版本要在3.6及其以上

这里并不能直接使用如下安装命令:

pip install httpx

因为这样安装的话,你所安装的httpx是不支持HTTP/2.0的,应该这样安装:

pip install 'httpx[http2]'
基本使用

我们尝试一些使用httpx请求一个网站

import httpx

response = httpx.get('https://spa16.scrape.center')
print(response.text)

它运行的结果为:

Traceback (most recent call last):
...
raise mapped_exc(message) from exc
httpx.RemoteProtocolError: Server disconnected without sending a response.

可以看出报错了,虽然前面说httpx支持HTTP2.0,并且我们也安装了对应支持它的库,但是httpx默认是使用HTTP1.1的,我们需要手动的说明一下才可以让它正常支持HTTP2.0

import httpx

client = httpx.Client(http2=True)
response = client.get('https://spa16.scrape.center')
print(response.text)

它运行的结果为:

Scrape | Book

现在我们发现可以成功的获取HTML代码了,所以以后使用httpx的时候需要开启对HTTP2.0的支持才行。

上面我们使用的是GET方法,另外对于POST请求等方法来说,实现的方法类似,在这里就不做过多示范,httpx的一些基本方法也和requests极其类似,想要更加深入了解的可以自行去官网查阅资料

官网地址我放在这里:http://www.python-httpx.org/quickstart

Client对象

来说一下http跟requests中不相似的,其中httpx中有一个Client对象。

可以用httpx.Client()来类比requests.Session()

举个例子:

import httpx

with httpx.Client() as client:
    response = client.get('https://www.httpbin.org/get')
    print(response)

它运行的结果为:


这个用法等价于;

import httpx

client = httpx.Client()
try:
    response = client.get('https://www.httpbin.org/get')
finally:
    client.close()

另外声明Client对象时可以指定一些参数

import httpx

url = 'http://httpbin.org/headers'
headers = {'user-agent': 'my-app/0.0.1'}
with httpx.Client(headers=headers) as client:
    r = client.get(url)
    
var = r.json()['headers']['User-Agent']
print(var)

它运行的结果为:

my-app/0.0.1

可以看到,headers成功赋值了。

另外,我想说,如果使用httpx进行客户端和服务器的连接,两者的HTTP协议要进行匹配才能成功连接和传输信息。

异步请求

httpx还支持异步客户端请求,在这里就先了解一下,等以后学习的时候再进行总结。

最后我想说

httpx的用法和requests用法非常相似,我们可以多进行类比学习,但也要注意两者的区别,灵活使用,更多的用法可以去官方文档里面去学习,比起眼花缭乱的各种资料视频,官网文档有时候可能更有利于学习。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029240.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号