首页Python3.请求库——httpx库...

3.请求库——httpx库

1.概述:

有些网站强制使用了HTTP/2.0,而urllib和requests库都只支持HTTP/1.1,不支持HTTP/2.0,此时使用这两个库都无法抓取数据。
就需要使用支持HTTP/2.0的请求库,例如httpx库、hyper库。
使用以下命令,这样既安装了httpx库,又安装了httpx库中对HTTP/2.0的支持模块。
pip install httpx[http2]

更多内容可以查看官方文档

2.基本用法:

httpx库中一些基本用法与requests库非常相似,因此很多API的也很相似。

属性或方法说明
status_code状态码
text响应体的文本内容
content响应体的二进制内容
headers请求头
json调用该方法可以将文本结果转化为json对象
import httpx

r = httpx.get('https://httpbin.org/get')
print(r.status_code)
print('-------------')
print(r.headers)
print('-------------')
print(r.text)

运行结果如下:

200
-------------
Headers({'date': 'Thu, 21 Apr 2022 12:57:56 GMT', 'content-type': 'application/json', 'content-length': '309', 'connection': 'keep-alive', 'server': 'gunicorn/19.9.0', 'access-control-allow-origin': '*', 'access-control-allow-credentials': 'true'})
-------------
{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "User-Agent": "python-httpx/0.22.0", 
    "X-Amzn-Trace-Id": "Root=1-626154d4-69a77c474b9ac4bd254c493e"
  }, 
  "origin": "101.86.213.228", 
  "url": "https://httpbin.org/get"
}
  • params参数:将字典或字节序列,作为参数增加到url中
import httpx

# 字典对象
params_1 = {'key1':'value1' , 'key2':'value2'}
# value值也可以是列表格式
params_2 = {'key1': 'value1', 'key2': ['value2', 'value3']}

r_1 = httpx.get('https://httpbin.org/get' , params=params_1)
print(r_1.url)
print('-------------')
r_2 = httpx.get('https://httpbin.org/get' , params=params_2)
print(r_2.url)

运行结果如下:

https://httpbin.org/get?key1=value1&key2=value2
-------------
https://httpbin.org/get?key1=value1&key2=value2&key2=value3
  • json()方法将文本结果转化为json对象
import httpx

r = httpx.get('https://httpbin.org/get')
print(r.json())

更多内容可以查看官方文档

3.开启对HTTP/2.0的支持:

http默认是不开启对HTTP/2.0的支持,默认使用的是HTTP/1.1,需要手动声明才可以。
需要先声明一个Client对象,然后将http2参数设置为True,这样便开启了对HTTP/2.0的支持。

import httpx

client = httpx.Client(http2=True)
r = client.get(url)

4.Client对象

开启对HTTP/2.0的支持时,使用到了Client对象,官方比较推荐使用with as语句的方式。

import httpx

with httpx.Client() as client:
    r = client.get(url)
    print(r.text)

在声明Client对象时,可以指定一些参数,这样发起请求时会默认带上这些参数信息。

import httpx

url = 'https://httpbin.org/get'
headers = {'User-Agent':'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
with httpx.Client(headers=headers) as client:
    r = client.get(url)
    print(r.text)

运行结果如下:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate, br", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)", 
    "X-Amzn-Trace-Id": "Root=1-62615aa4-7a798daa607ad3903747bdde"
  }, 
  "origin": "101.86.213.228", 
  "url": "https://httpbin.org/get"
}

可以看到,headers已经赋值成功。
更多关于Client对象的用法可以参考官方文档

RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments