<<返回python首页 python

《Python 应用案例》

Python中的httpx模块

httpx模块是Python中用于http请求的模块,类似于requests、aiohttp;既能发送同步请求(是指在单进程单线程的代码中,发起一次请求后,在收到返回结果之前,不能发起下一次请求),又能发送异步请求(是指在单进程单线程的代码中,发起一次请求后,在等待网站返回结果的时间里,可以继续发送更多请求)。

由于httpx支持异步请求,所以发送大量的请求时,httpx的效率是优于传统的requests的。

Python中的httpx模块

安装httpx

!pip3 install httpx -i  https://pypi.tuna.tsinghua.edu.cn/simple

导入 httpx

import httpx

获取一个网页

r = httpx.get("https://httpbin.org/get")

r

同样,发送 HTTP POST 请求:

r = httpx.post("https://httpbin.org/post", data={"key": "value"})

r

PUT,DELETE,HEAD和OPTIONS请求都遵循相同的方式:

r = httpx.put("https://httpbin.org/put", data={"key": "value"})

r = httpx.delete("https://httpbin.org/delete")

r = httpx.head("https://httpbin.org/get")

r = httpx.options("https://httpbin.org/get")

URL 中传递参数

  1. 在请求URL中传递查询参数,请使用 params 关键字
r = httpx.get("https://httpbin.org/get", params=params)
r
# 检查发出请求结果的`URL`
r.url
  1. 将项目列表作为值传递
params = {"key1": "value2", "key2": ["value2", "value3"]}

r = httpx.get("https://httpbin.org/get", params=params)

r.url

响应内容

HTTPX将自动处理响应内容解码为 Unicode 文本

r = httpx.get("https://www.example.org/")

r.text
# 解码
r.encoding
# 设置需要使用的编码
r.encoding = "ISO-8859-1"
print(r.headers, r.http_version, r.url, r.status_code)

返回JSON响应内容

通常, Web API 响应将被编码为JSON

r = httpx.get("https://api.github.com/events")
r.json()

自定义 header

要在传出请求中包含其他标头,请使用 header 关键字参数:

url = 'http://httpbin.org/headers'

headers = {"user-agent": "my-app/0.0.1"}

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

发送表单数据

某些类型的HTTP请求,如 POST|PUT

data = {"key1":"value1", "key1": "value2"}

r = httpx.post("https://httpbin.org/post", data=data)

print(r.text)

表单编码的数据还可以包括给定键的多个值:

data = {"userList": ["shuke", "jack"]}

r = httpx.post("https://httpbin.org/post", data=data)

print(r.text)

发送分段文件上传

使用HTTP分段编码上传文件

files = {"upload-file": open("/etc/passwd", "rb")}

r = httpx.post("https://httpbin.org/post", files=files)

print(r.text)

发送JSON编码数据

data = {"integer": 123, "boolean": True, "list": ["a", "b", "c"]}

r = httpx.post("https://httpbin.org/post", json=data)

print(r.text)

响应状态码

检查响应的 HTTP 状态码

r = httpx.get("https://httpbin.org/get")
r.status_code

HTTPX还包括一个简单的快捷方式,用于通过其文本短语访问状态代码

r.status_code == httpx.codes.OK

针对任何客户端或服务器错误响应(4xx或5xx状态代码) 引发异常:

not_found = httpx.get("https://httpbin.org/status/404")

not_found.status_code
not_found.rasise_for_status()

响应Headers

响应标头可作为类似于字典的接口使用

r.headers

Headers 数据类型是不区分大小写的,所以你可以使用任何资本

r.headers["Content-Type"]
r.headers.get("content-type")

流响应

可以流式传输响应的二进制内容

with httpx.stream("GET", "https://www.example.com") as r:
    for data in r.iter_bytes():
        print(data)

或文字…

with httpx.stream("GET", "https://www.example.com") as r:
    for text in r.iter_text():
        print(text)

或逐行流文本…

with httpx.stream("GET", "https://www.example.com") as r:
    for text in r.iter_lines():
        print(text)

Cookies

可以轻松访问响应中设置的任何cookie:

r = httpx.get("http://httpbin.org/cookies/set?chocolate=chip", allow_redirects=False)

r.cookies["chocolate"]

如果需要将 Cookies 包含在外发请求中,请使用 cookies 参数:

cookies = {"peanut": "butter"}

r = httpx.get("http://httpbin.org/cookies", cookies=cookies)

r.json()

Cookies 按 域访问设置

cookies = httpx.Cookies()

cookies.set('cookie_on_domain', 'hello, there!', domain='httpbin.org')

cookies.set('cookies_off_domain', 'nope', domain="example.org")

r = httpx.get("http://httpbin.org/cookies", cookies=cookies)

r.json()

URL 重定向和历史

默认情况下,HTTPX将对重定向执行除 HEAD 请求之外的任何操作。

history 响应的属性可用于检查所有后续重定向,它包含遵循他们的顺序的所有重定向响应的列表

#GITHUB` 将所有 `HTTP` 请求重定向到 `HTTPS
r = httpx.get("http://github.com")

r.url
r.history

您可以使用allow_redirects参数修改默认的重定向处理:

r = httpx.head('http://github.com/', allow_redirects=True)
r.url

认证方式

  1. HTTPX支持基本和摘要HTTP身份验证
httpx.get("https://example.com", auth=("my_user", "password123"))
  1. 摘要式身份验证的凭据
auth = httpx.DigestAuth("my_user", "password123")
httpx.get("https://example.com", auth=auth)
移动端设备除iPad Pro外,其它移动设备仅能阅读基础的文本文字。
建议使用PC或笔记本电脑,浏览器使用Chrome或FireFox进行浏览,以开启左侧互动实验区来提升学习效率,推荐使用的分辨率为1920x1080或更高。
我们坚信最好的学习是参与其中这一理念,并致力成为中文互联网上体验更好的学练一体的IT技术学习交流平台。
您可加QQ群:575806994,一起学习交流技术,反馈网站使用中遇到问题。
内容、课程、广告等相关合作请扫描右侧二维码添加好友。

狐狸教程 Copyright 2021

进入全屏