本文来介绍一下 HTTP 请求中的 PUT 请求以及如何在 Python 中发送这种请求。PUT 请求通常用于更新服务器上的资源,比如修改用户信息或者更新配置数据。
安装 requests 库
首先,我们需要一个非常流行的库——requests
,它让 HTTP 请求变得非常简单。打开你的命令行工具,然后运行:
pip install requests
macOS 中需要将pip
改为pip3
。
验证安装:
安装完成后,你可以通过以下命令来检查安装是否成功:
import requests
print(requests.__version__)
如果没有报错并且输出了版本号,那就说明一切顺利!
发送一个简单的 PUT 请求
现在我们来发送一个最基本的 PUT 请求。假设我们有一个 API 地址 https://jsonplaceholder.typicode.com/posts/1
,我们要更新这篇帖子的信息。
import requests
url = 'https://jsonplaceholder.typicode.com/posts/1'
data = {
"title": "foo",
"body": "bar",
"userId": 1
}
response = requests.put(url, json=data)
print(response.status_code)
print(response.json())
解释代码:
url
是我们要请求的 API 地址。data
是我们要更新的内容,用一个字典来表示。requests.put
发送 PUT 请求,json=data
表示我们发送的是 JSON 数据。response.status_code
会输出响应的状态码,比如 200 表示成功。response.json()
会输出服务器返回的 JSON 数据。
PUT 请求中的参数
发送 JSON 数据
刚才我们已经演示了如何发送 JSON 数据,只需要在 requests.put
中使用 json=data
参数。
发送表单数据
如果你需要发送表单数据,可以这样做:
response = requests.put(url, data=data)
发送文件
要发送文件的话,你可以这样做:
files = {'file': open('report.txt', 'rb')}
response = requests.put(url, files=files)
处理 PUT 请求的响应
检查响应状态码
检查状态码是了解请求是否成功的关键:
if response.status_code == 200:
print("请求成功")
else:
print("请求失败")
解析响应内容
你可以使用 response.json()
来解析 JSON 响应,或者使用 response.text
获取文本响应。
print(response.json())
错误处理
处理错误也很重要。你可以这样做:
try:
response = requests.put(url, json=data)
response.raise_for_status()
except requests.exceptions.HTTPError as err:
print(f"HTTP 错误: {err}")
except Exception as err:
print(f"其他错误: {err}")
高级用法
设置自定义请求头
有时候你需要设置一些自定义的请求头:
headers = {'Content-Type': 'application/json'}
response = requests.put(url, json=data, headers=headers)
使用身份验证
如果 API 需要身份验证,你可以这样做:
response = requests.put(url, json=data, auth=('user', 'pass'))
超时和重试
设置超时很简单:
response = requests.put(url, json=data, timeout=5)
重试请求可以使用 requests
的 HTTPAdapter
:
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
s = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
s.mount('http://', adapter)
s.mount('https://', adapter)
response = s.put(url, json=data)
完整示例代码
让我们把这些知识点综合起来,写一个完整的示例:
import requests
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry
url = 'https://jsonplaceholder.typicode.com/posts/1'
data = {
"title": "foo",
"body": "bar",
"userId": 1
}
headers = {'Content-Type': 'application/json'}
s = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
s.mount('http://', adapter)
s.mount('https://', adapter)
try:
response = s.put(url, json=data, headers=headers, timeout=5)
response.raise_for_status()
print("请求成功:", response.json())
except requests.exceptions.HTTPError as err:
print(f"HTTP 错误: {err}")
except Exception as err:
print(f"其他错误: {err}")
使用 Apifox 测试、管理接口
Apifox 是一个集 API 文档、调试、Mock 和自动化测试于一体的工具,它可以帮助我们更加方便地调试和测试接口,还可以根据接口快速生成业务代码。
调试 PUT 接口
首先打开 Apifox,创建一个新的 HTTP 项目,在项目中,将鼠标光标移动到+
号按钮那里,点击 "新建接口"。填写接口的 URL 和请求方法(PUT),保存后来到“运行”页,点击 "发送" 按钮,查看请求的响应,这样可以测试接口是否正常。
生成代码
Apifox 可以自动生成请求代码,包括生成 Python、JAVA、Axios 等代码。接口发送请求后,在下方的“实际请求”中,可以根据你的业务需求选择生成相应语言的代码。
除此之外,还可以在“文档”页面,点击右上角的 "生成代码" 按钮,你可以在此生成接口请求代码,也可以生成实际的业务代码。
比如我要生成一个 Python 的接口请求代码,其示例生成的代码如下图所示:
是不是非常 nice,利用 Apifox 能大大提升开发效率,快去试试吧!
总结
本文介绍了 HTTP PUT 请求及其在 Python 中的实现。PUT 请求常用于更新服务器资源,如用户信息,通过安装和验证 requests
库,可以轻松发送 PUT 请求,处理响应,进行错误处理,并设置自定义头和身份验证。还介绍了 Apifox ,用于调试和生成 API 请求代码,提升开发效率,强烈推荐使用!