导入httpx
1 | In [25]: import httpx |
获取一个网页
1 | In [26]: r = httpx.get("https://httpbin.org/get") |
同样,发送HTTP POST
请求:
1 | In [28]: r = httpx.post("https://httpbin.org/post", data={"key": "value"}) |
PUT,DELETE,HEAD和OPTIONS请求都遵循相同的方式:
1 | In [35]: r = httpx.put("https://httpbin.org/put", data={"key": "value"}) |
在URL
中传递参数
- 在请求URL中传递查询参数,请使用
params
关键字1
2
3
4
5
6
7
8In [41]: r = httpx.get("https://httpbin.org/get", params=params)
In [42]: r
Out[42]: <Response [200 OK]>
# 检查发出请求结果的`URL`
In [43]: r.url
Out[43]: URL('https://httpbin.org/get?key1=value2&key2=value2') - 将项目列表作为值传递
1
2
3
4
5
6In [44]: params = {"key1": "value2", "key2": ["value2", "value3"]}
In [45]: r = httpx.get("https://httpbin.org/get", params=params)
In [46]: r.url
Out[46]: URL('https://httpbin.org/get?key1=value2&key2=value2&key2=value3')
响应内容
HTTPX将自动处理响应内容解码为Unicode
文本
1 | In [52]: r = httpx.get("https://www.example.org/") |
返回JSON响应内容
通常, Web API 响应将被编码为JSON
1 | In [59]: r = httpx.get("https://api.github.com/events") |
自定义header
要在传出请求中包含其他标头,请使用header
关键字参数:
1 | In [60]: url = 'http://httpbin.org/headers' |
发送表单数据
某些类型的HTTP请求,如POST|PUT
1 | In [64]: data = {"key1":"value1", "key1": "value2"} |
表单编码的数据还可以包括给定键的多个值:
1 | In [72]: data = {"userList": ["shuke", "jack"]} |
发送分段文件上传
使用HTTP分段编码上传文件
1 | In [76]: files = {"upload-file": open("/Users/shuke/Work/pha/docker-compose.yml", "rb")} |
发送JSON编码数据
1 | In [79]: data = {"integer": 123, "boolean": True, "list": ["a", "b", "c"]} |
响应状态码
检查响应的HTTP
状态码
1 | In [82]: r = httpx.get("https://httpbin.org/get") |
HTTPX还包括一个简单的快捷方式,用于通过其文本短语访问状态代码
1 | In [84]: r.status_code == httpx.codes.OK |
针对任何客户端或服务器错误响应(4xx或5xx状态代码) 引发异常:
1 | In [85]: not_found = httpx.get("https://httpbin.org/status/404") |
响应Headers
响应标头可作为类似于字典的接口使用
1 | In [88]: r.headers |
该Headers
数据类型是不区分大小写的,所以你可以使用任何资本
1 | In [89]: r.headers["Content-Type"] |
流响应
可以流式传输响应的二进制内容
1 | In [91]: with httpx.stream("GET", "https://www.example.com") as r: |
或文字…
1 | In [93]: with httpx.stream("GET", "https://www.example.com") as r: |
或逐行流文本…
1 | In [96]: with httpx.stream("GET", "https://www.example.com") as r: |
Cookies
可以轻松访问响应中设置的任何cookie:
1 | In [97]: r = httpx.get("http://httpbin.org/cookies/set?chocolate=chip", allow_redirects=False) |
如果需要将Cookies
包含在外发请求中,请使用cookies
参数:
1 | In [99]: cookies = {"peanut": "butter"} |
Cookies
按 域访问设置
1 | In [102]: cookies = httpx.Cookies() |
URL
重定向和历史
默认情况下,HTTPX将对重定向执行除HEAD
请求之外的任何操作。history
响应的属性可用于检查所有后续重定向,它包含遵循他们的顺序的所有重定向响应的列表GITHUB
将所有HTTP
请求重定向到HTTPS
1 | In [107]: r = httpx.get("http://github.com") |
您可以使用allow_redirects参数修改默认的重定向处理:
1 | In [113]: r = httpx.head('http://github.com/', allow_redirects=True) |
认证方式
HTTPX支持基本和摘要HTTP身份验证
1
2
3In [122]: httpx.get("https://example.com", auth=("my_user", "password123"))
...:
Out[122]: <Response [200 OK]>摘要式身份验证的凭据
1
2
3
4In [123]: auth = httpx.DigestAuth("my_user", "password123")
In [124]: httpx.get("https://example.com", auth=auth)
Out[124]: <Response [200 OK]>