授课语音

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 提供了多种方式来传递请求体数据:

  1. 传递 JSON 数据(推荐方式):

    response = requests.post("https://jsonplaceholder.typicode.com/posts", json={"title": "foo", "body": "bar", "userId": 1})
    
  2. 传递表单数据:

    response = requests.post("https://httpbin.org/post", data={"key": "value"})
    
  3. 上传文件:

    files = {'file': open('myfile.txt', 'rb')}
    response = requests.post("https://httpbin.org/post", files=files)
    

5. 响应处理

发送请求后,requests 会返回一个响应对象,包含了服务器返回的数据。

常见的响应属性

  1. response.text:获取响应体的文本内容(字符串格式)。
  2. response.json():将响应体解析为 JSON 对象(如果响应是 JSON 格式)。
  3. response.status_code:获取响应的状态码(如 200, 404 等)。
  4. 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 库简化了网络请求的流程,让我们能够专注于业务逻辑的实现。
去1:1私密咨询

系列课程: