第2课_requests库和请求结构
热度🔥:8 免费课程
授课语音
Python 的 requests
库和请求结构
在 Python 中,requests
是一个简单且功能强大的 HTTP 库,广泛用于发送 HTTP 请求。它简化了网络请求的过程,让开发者能够方便地与 web 服务器进行交互。
1. requests
库简介
requests
是一个第三方库,用于发送 HTTP 请求(如 GET、POST、PUT、DELETE 等)。它使得 HTTP 请求变得更加简单和直观,同时支持会话(Session)、请求头、认证、代理、文件上传等功能。
安装 requests
库
在使用 requests
库之前,需要先安装它:
pip install requests
2. 常见的 HTTP 请求类型
requests
库支持多种 HTTP 请求类型,最常用的是:
- GET:请求指定的资源,获取数据。
- POST:提交数据给服务器,通常用于表单提交或上传文件。
- PUT:更新指定资源。
- DELETE:删除指定资源。
3. requests
的基本用法
1. 发送 GET 请求
GET 请求通常用于从服务器获取资源,requests.get()
方法可以发送 GET 请求。
import requests
# 发送 GET 请求
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
# 查看返回的内容
print(response.text)
输出:
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit...quae explicabo...error... etc."
}
2. 发送 POST 请求
POST 请求通常用于向服务器发送数据(例如表单提交),requests.post()
方法用于发送 POST 请求。
import requests
# POST 请求传递的数据
data = {"title": "foo", "body": "bar", "userId": 1}
# 发送 POST 请求
response = requests.post("https://jsonplaceholder.typicode.com/posts", json=data)
# 打印返回的响应内容
print(response.text)
输出:
{
"title": "foo",
"body": "bar",
"userId": 1,
"id": 101
}
3. 发送 PUT 请求
PUT 请求用于更新资源,requests.put()
方法用于发送 PUT 请求。
import requests
# 更新的数据
data = {"id": 1, "title": "foo", "body": "bar", "userId": 1}
# 发送 PUT 请求
response = requests.put("https://jsonplaceholder.typicode.com/posts/1", json=data)
# 打印返回的响应内容
print(response.text)
4. 发送 DELETE 请求
DELETE 请求用于删除服务器上的资源,requests.delete()
方法用于发送 DELETE 请求。
import requests
# 发送 DELETE 请求
response = requests.delete("https://jsonplaceholder.typicode.com/posts/1")
# 打印返回的响应内容
print(response.text) # 可能是空的,表示删除成功
4. 请求的结构
每一个 HTTP 请求都由以下几个部分组成:
请求方法
请求方法是 HTTP 请求的一部分,告诉服务器客户端需要执行的操作。常见的请求方法有:GET、POST、PUT、DELETE。
请求 URL
URL 是访问特定资源的地址。例如:
https://jsonplaceholder.typicode.com/posts/1
:获取 ID 为 1 的帖子。
请求头(Headers)
请求头用于提供关于客户端和请求的附加信息。例如,用户代理(浏览器类型)、认证信息等。requests
库通过字典形式传递请求头。
import requests
# 设置请求头
headers = {
"User-Agent": "my-app",
"Accept": "application/json"
}
# 发送 GET 请求并传递请求头
response = requests.get("https://jsonplaceholder.typicode.com/posts/1", headers=headers)
print(response.text)
请求参数(Parameters)
GET 请求时,通常会通过查询字符串传递参数。例如,https://api.example.com/search?q=python
中,q=python
就是查询参数。
import requests
# 设置请求参数
params = {"q": "python", "page": 1}
# 发送 GET 请求,并传递参数
response = requests.get("https://api.example.com/search", params=params)
print(response.text)
请求体(Body)
POST 和 PUT 请求通常需要在请求体中传递数据。requests
提供了多种方式来传递请求体数据:
传递 JSON 数据(推荐方式):
response = requests.post("https://jsonplaceholder.typicode.com/posts", json={"title": "foo", "body": "bar", "userId": 1})
传递表单数据:
response = requests.post("https://httpbin.org/post", data={"key": "value"})
上传文件:
files = {'file': open('myfile.txt', 'rb')} response = requests.post("https://httpbin.org/post", files=files)
5. 响应处理
发送请求后,requests
会返回一个响应对象,包含了服务器返回的数据。
常见的响应属性
- response.text:获取响应体的文本内容(字符串格式)。
- response.json():将响应体解析为 JSON 对象(如果响应是 JSON 格式)。
- response.status_code:获取响应的状态码(如 200, 404 等)。
- response.headers:获取响应头的字典。
import requests
# 发送 GET 请求
response = requests.get("https://jsonplaceholder.typicode.com/posts/1")
# 获取状态码
print(response.status_code) # 输出: 200
# 获取响应头
print(response.headers)
# 获取响应内容
print(response.text)
# 如果返回的是 JSON 格式数据,使用 json() 方法解析
data = response.json()
print(data)
6. 处理异常
在进行网络请求时,可能会遇到超时、连接错误等异常。可以通过 try-except
语句来捕获和处理这些异常。
import requests
try:
response = requests.get("https://jsonplaceholder.typicode.com/posts/1", timeout=5)
response.raise_for_status() # 检查请求是否成功
print(response.text)
except requests.exceptions.Timeout:
print("请求超时")
except requests.exceptions.RequestException as e:
print(f"请求错误:{e}")
7. 会话管理(Session)
使用 requests.Session()
可以保持会话。它可以跨请求保持某些参数,如 cookies、头信息等。
import requests
# 创建会话对象
session = requests.Session()
# 发送请求并保持会话
response = session.get("https://jsonplaceholder.typicode.com/posts/1")
print(response.text)
# 会话关闭
session.close()
总结
requests
库是一个功能强大的 HTTP 客户端,能够轻松处理常见的 HTTP 请求类型(GET、POST、PUT、DELETE)。- HTTP 请求包括方法、URL、头部、参数和请求体。
requests
提供了丰富的 API 用于处理响应、异常以及会话管理。- 在开发中,
requests
库简化了网络请求的流程,让我们能够专注于业务逻辑的实现。