requests 库使用笔记

269 阅读4分钟

requests 库使用笔记

requests 是 Python 中一个简单易用的 HTTP 库,它提供了很多便捷的 API 来进行 HTTP 请求和响应处理。通过 requests,你可以轻松地发送 GET、POST 请求、处理 Cookies、认证、会话等。以下是 requests 库的一些常见使用方式和技巧。

安装 requests

首先,你需要安装 requests 库,可以通过以下命令安装:

pip install requests

发送 GET 请求

发送 GET 请求是最常见的请求类型,适用于获取资源或数据。

示例代码:

import requests

# 发送一个 GET 请求
response = requests.get('https://www.example.com')

# 打印响应内容
print(response.text)  # 响应内容的 HTML
print(response.status_code)  # 响应状态码

说明:

  • response.text:返回的内容(例如 HTML、JSON 等)。
  • response.status_code:HTTP 响应状态码。
  • response.content:返回的二进制内容(如图片、音频文件等)。

发送 POST 请求

POST 请求通常用于提交数据到服务器。你可以将表单数据、JSON 或其他类型的数据作为请求体发送。

示例代码:

import requests

url = 'https://www.example.com/login'
data = {'username': 'myusername', 'password': 'mypassword'}

# 发送 POST 请求
response = requests.post(url, data=data)

# 打印响应内容
print(response.text)

说明:

  • data:发送的数据(例如表单数据)。
  • response.text:响应的文本内容。

发送 JSON 数据

如果需要发送 JSON 数据,可以通过设置请求头并使用 json 参数来发送。

示例代码:

import requests
import json

url = 'https://www.example.com/api'
data = {'name': 'John', 'age': 30}

# 发送 JSON 数据
response = requests.post(url, json=data)

# 打印响应内容
print(response.json())  # 解析响应内容为 JSON 格式

说明:

  • json:直接将数据转换为 JSON 格式并发送。
  • response.json():将响应内容解析为 JSON 格式(如果响应是有效的 JSON)。

设置请求头

有时候我们需要设置 HTTP 请求头来模拟浏览器或处理其他需求(如 API 密钥、内容类型等)。

示例代码:

import requests

url = 'https://www.example.com'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36',
    'Authorization': 'Bearer your_token_here'
}

response = requests.get(url, headers=headers)

print(response.status_code)

说明:

  • headers:字典格式,包含自定义的请求头。

处理查询参数

你可以通过 params 参数来传递查询字符串参数。

示例代码:

import requests

url = 'https://www.example.com/search'
params = {'q': 'python', 'page': 2}

# 发送 GET 请求并附带查询参数
response = requests.get(url, params=params)

print(response.text)

说明:

  • params:字典格式,自动构建查询字符串。

处理 Cookies

通过 requests 你可以轻松地管理和发送 Cookies。可以使用 cookies 参数手动设置 Cookies,或者通过 response.cookies 获取服务器返回的 Cookies。

示例代码:

import requests

url = 'https://www.example.com'

# 创建会话对象
session = requests.Session()

# 设置 Cookies
cookies = {'session_id': '123456789'}

# 发送带 Cookies 的 GET 请求
response = session.get(url, cookies=cookies)

# 获取响应中的 Cookies
print(response.cookies)

说明:

  • session.get(url, cookies=cookies):手动设置 Cookies。
  • response.cookies:获取服务器返回的 Cookies。

会话对象 (Session)

requests.Session() 提供了一个会话对象,它允许你在多次请求之间保持会话的状态(如 Cookies、连接池等)。

示例代码:

import requests

# 创建会话对象
session = requests.Session()

# 使用会话对象发送请求
response = session.get('https://www.example.com')

# 使用相同的会话对象发送多个请求,Cookies 会自动保存
response2 = session.get('https://www.example.com/another_page')

说明:

  • Session 对象使得你可以跨多个请求保持会话状态。

请求超时

可以使用 timeout 参数来设置请求的超时时间。

示例代码:

import requests

try:
    response = requests.get('https://www.example.com', timeout=5)  # 设置 5 秒超时
    print(response.status_code)
except requests.exceptions.Timeout:
    print("Request timed out")

说明:

  • timeout:请求超时时间(单位:秒)。

处理响应状态码

requests 会返回响应对象,你可以通过 status_code 来检查 HTTP 响应的状态码。

示例代码:

import requests

response = requests.get('https://www.example.com')

if response.status_code == 200:
    print("Request was successful!")
else:
    print(f"Failed with status code: {response.status_code}")

说明:

  • response.status_code:检查 HTTP 响应状态码。
  • 200 状态码表示请求成功。

上传文件

requests 也支持文件上传。你可以通过 files 参数来上传文件。

示例代码:

import requests

url = 'https://www.example.com/upload'
files = {'file': open('example.txt', 'rb')}

# 上传文件
response = requests.post(url, files=files)

print(response.text)

说明:

  • files:文件上传时使用的字典格式,键是字段名,值是文件对象。

认证

requests 支持几种认证方式,如基本认证(Basic Auth)、令牌认证等。

示例代码(Basic Auth):

import requests
from requests.auth import HTTPBasicAuth

url = 'https://www.example.com'
response = requests.get(url, auth=HTTPBasicAuth('username', 'password'))

print(response.status_code)

说明:

  • HTTPBasicAuth:用于基本认证,提供用户名和密码。

处理重定向

默认情况下,requests 会自动处理 3xx 重定向状态码。如果你不希望自动重定向,可以禁用重定向。

示例代码:

import requests

response = requests.get('https://www.example.com', allow_redirects=False)

if response.status_code == 301:
    print("Redirected!")

说明:

  • allow_redirects=False:禁用自动重定向。

最后

requests 是一个功能强大且易于使用的 HTTP 请求库,适用于日常的 Web 数据抓取、API 请求、测试等任务。通过上述示例和功能,你可以轻松掌握 requests 的基本用法及高级技巧,提高你处理 HTTP 请求的效率。

你可以访问官方文档 requests documentation 了解更多详细内容。