想象一下,你在餐厅点菜。你可以:
- get:像服务员大声报出你想要的菜(所有人都能听到)
- post:像把写好的菜单悄悄递给服务员(内容不公开)
这就是http请求中最常见的两种方式,让我们用python来探索它们的差别。
最常用的两种请求方式
1. get请求 - 从服务器"获取"数据
就像在浏览器地址栏输入网址一样,所有参数都显示在url中。
import requests
# 基本get请求
response = requests.get('https://api.example.com/users')
# 带查询参数的get请求
params = {
'page': 2,
'limit': 10,
'search': 'python'
}
response = requests.get('https://api.example.com/users', params=params)
# 最终请求的url会是:https://api.example.com/users?page=2&limit=10&search=python
print(response.url)
特点:
- 参数在url中可见(像明信片)
- 有长度限制
- 适合获取数据
- 可以被缓存、收藏
2. post请求 - 向服务器"提交"数据
像填写表单后提交,数据放在请求体中,不在url中显示。
import requests
# 提交表单数据
form_data = {
'username': 'john_doe',
'email': 'john@example.com'
}
response = requests.post('https://api.example.com/register', data=form_data)
# 提交json数据(现代api常用)
json_data = {
'product': 'laptop',
'price': 999.99,
'features': ['16gb ram', '512gb ssd']
}
response = requests.post('https://api.example.com/products', json=json_data)
特点:
- 数据在请求体中(像信封内的信)
- 无长度限制
- 适合创建/更新数据
- 更安全(不暴露在url中)
其他请求方式
# put - 更新/替换整个资源
requests.put('https://api.example.com/users/123', json={'name': 'new_name'})
# patch - 部分更新资源
requests.patch('https://api.example.com/users/123', json={'email': 'new@email.com'})
# delete - 删除资源
requests.delete('https://api.example.com/users/123')
参数传递的三种主要方式
1. 查询参数 (query parameters)
# 在url中传递
requests.get('https://api.example.com/search?q=python&sort=newest')
# 或使用params参数(推荐)
params = {'q': 'python', 'sort': 'newest'}
requests.get('https://api.example.com/search', params=params)
2. 表单数据 (form data)
# 类似html表单提交
form_data = {'username': 'user', 'password': 'pass'}
requests.post(url, data=form_data)
3. json数据
# 现代api最常用的方式
json_data = {'name': 'john', 'age': 30}
requests.post(url, json=json_data)
# 注意:使用json参数会自动设置content-type为application/json
实际应用示例:创建一个用户
import requests
def create_user(user_data):
url = 'https://api.example.com/users'
try:
# 使用post发送json数据
response = requests.post(url, json=user_data, timeout=10)
# 检查请求是否成功
response.raise_for_status()
# 解析json响应
result = response.json()
print(f"用户创建成功!用户id: {result['id']}")
return result
except requests.exceptions.requestexception as e:
print(f"创建用户失败: {e}")
return none
# 使用函数
new_user = {
'name': '张三',
'email': 'zhangsan@example.com',
'role': 'admin'
}
create_user(new_user)
如何选择正确的请求方式
| 场景 | 推荐方法 | 示例 |
|---|---|---|
| 获取数据 | get | 获取用户列表 |
| 创建新资源 | post | 注册新用户 |
| 更新整个资源 | put | 替换用户所有信息 |
| 部分更新资源 | patch | 只更新用户邮箱 |
| 删除资源 | delete | 删除用户账户 |
小贴士
安全性:永远不要在get请求中传递密码等敏感信息
api文档:总是先阅读api文档,了解它期望的请求方式和参数格式
错误处理:总是检查响应状态码
if response.status_code == 200:
print("成功!")
elif response.status_code == 404:
print("资源未找到")
现在你已经掌握了python中不同http请求方式的使用方法和区别!就像学会了不同的沟通方式,你可以根据不同的场景选择最合适的请求方法。
到此这篇关于python发送http请求的不同方式与参数差别详解的文章就介绍到这了,更多相关python发送http请求内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论