编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

python requests库有哪些高级用法

wxchong 2024-08-31 04:01:53 开源技术 9 ℃ 0 评论

`requests` 库是 Python 中一个非常流行的 HTTP 客户端库,因其简单易用而受到广泛欢迎。除了基本的 GET 和 POST 请求外,`requests` 库也提供了一些高级用法,可以帮助开发者处理更复杂的 HTTP 操作。以下是一些 `requests` 库的高级用法:


### 1. 会话对象


`requests.Session` 可以保持一些参数在多个请求之间的持久性,比如 cookies 和 headers,从而模拟一个用户会话。


```python

import requests


# 创建一个会话对象

session = requests.Session()


# 在会话中设置一个通用的 header

session.headers.update({'User-Agent': 'my-app/0.0.1'})


# 发起请求

response = session.get('https://httpbin.org/get')

print(response.json())

```


### 2. 自定义请求头


通过自定义请求头,可以模拟各种客户端或发送特定的请求信息。


```python

import requests


headers = {

'User-Agent': 'my-app/0.0.1',

'Authorization': 'Bearer your_token_here'

}


response = requests.get('https://httpbin.org/headers', headers=headers)

print(response.json())

```


### 3. 处理 JSON 数据


自动将请求的响应数据解析为 JSON 格式,以及发送 JSON 数据。


```python

import requests


# 发送 JSON 数据

data = {'key': 'value'}

response = requests.post('https://httpbin.org/post', json=data)


# 解析 JSON 响应

json_response = response.json()

print(json_response)

```


### 4. 文件上传


使用 `files` 参数可以轻松上传文件。


```python

import requests


files = {'file': open('example.txt', 'rb')}

response = requests.post('https://httpbin.org/post', files=files)

print(response.json())

```


### 5. 超时和重试机制


设置请求的超时时间以及使用 `urllib3` 的 `Retry` 机制来处理失败重试。


```python

import requests

from requests.adapters import HTTPAdapter

from urllib3.util.retry import Retry


session = requests.Session()


# 设置超时

timeout = (5, 14) # 连接超时, 读取超时


# 配置重试策略

retries = Retry(total=5, backoff_factor=1, status_forcelist=[500, 502, 503, 504])

adapter = HTTPAdapter(max_retries=retries)

session.mount('http://', adapter)

session.mount('https://', adapter)


try:

response = session.get('https://httpbin.org/delay/2', timeout=timeout)

print(response.status_code)

except requests.exceptions.RequestException as e:

print(f"An error occurred: {e}")

```


### 与高级用法相关的五个主题


1. **身份验证**:

- `requests` 支持多种身份验证机制(如基本认证、令牌认证),在高级情境中经常使用。


2. **代理设置**:

- 使用代理服务器可以隐藏客户端 IP 或绕过防火墙,`requests` 提供了简单的代理设置方法。


3. **流式请求**:

- 对于大文件的下载或上传,流式请求有助于节省内存和提高效率。


4. **异步请求**:

- 虽然 `requests` 本身是同步的,但可以结合 `concurrent.futures` 或 `asyncio` 来实现异步请求。


5. **错误处理**:

- 了解并使用 `requests` 的异常处理机制是确保程序健壮性的重要部分。


`requests` 库的强大之处在于其简洁的 API 和灵活的扩展能力,使其适用于从简单到复杂的各种 HTTP 请求场景。


我的文章可能还有不足之处,如有不同意见,请留言讨论。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表