Requests 网络请求:Python API 交互与数据获取
Requests 网络请求:Python API 交互与数据获取
一、前言
在现代软件开发中,与 Web 服务进行交互是一项基本技能。无论是从 API 获取数据、自动化 Web 任务,还是爬取网页信息,一个强大而简洁的 HTTP 客户端库都至关重要。Python 的 requests
库正是为此而生,它以其无与伦比的简洁性和强大的功能,成为了 Python 开发者进行网络请求的事实标准。本文将深入探讨 requests
库的核心功能,从发送简单的 GET 请求到处理复杂的 API 交互,助你轻松掌握网络数据获取的利器。
在开始之前,推荐一款强大的 AI 编程助手,它能极大地提升开发效率。
AI 助手推荐
- 官网:
https://0v0.pro
- 特色:
- 🆓 开源模型全免费:Llama、Qwen、Deepseek 等。
- 😲 基础模型全免费:gpt-4o、o4-mini 、gpt-5-mini 等。
- ♾️ 对话真正无限制:不限时间、不限次数。
- 🫡 每周免费一个旗舰模型:本周免费 gpt-5,不限使用!
二、安装与基础
在开始使用 requests
之前,需要先安装它。通过 pip 可以轻松完成安装。
pip install requests
✅ 发送 GET 请求
GET 是最常见的 HTTP 请求方法,用于从服务器请求数据。使用 requests
发送一个 GET 请求非常简单。
import requeststry:response = requests.get('https://api.github.com/events')response.raise_for_status() # 如果请求失败 (状态码不是 2xx),则抛出异常print("✅ 请求成功")
except requests.exceptions.RequestException as e:print(f"❌ 请求失败: {e}")
✅ 传递 URL 参数
当需要向 API 发送查询参数时(例如,?key1=value1&key2=value2
),可以使用 params
参数,requests
会自动为你构建 URL。
import requests# 定义查询参数
payload = {'key1': 'value1', 'key2': 'value2'}# 发送带参数的 GET 请求
response = requests.get('https://httpbin.org/get', params=payload)# 打印最终请求的 URL
print(f"请求的 URL: {response.url}")
三、深入响应对象 (Response)
每次调用 requests
的请求方法后,都会返回一个 Response
对象,它包含了服务器返回的所有信息。
✅ 响应状态码
状态码可以告诉你请求是否成功。
response = requests.get('https://api.github.com/events')if response.status_code == 200:print("✅ 成功! 状态码: 200")
elif response.status_code == 404:print("⚠️ 未找到! 状态码: 404")
else:print(f"其他状态码: {response.status_code}")
✅ 响应内容
requests
提供了多种方式来访问响应体:
response.text
:以文本形式返回响应内容(根据 HTTP 头部信息自动解码)。response.content
:以字节形式返回响应内容,适用于非文本内容(如图片、文件)。response.json()
:如果响应是 JSON 格式,此方法会自动将其解码为 Python 字典或列表。
import requestsresponse = requests.get('https://api.github.com/users/openai')if response.status_code == 200:# 解析 JSON 数据data = response.json()print(f"用户名: {data['login']}")print(f"公开仓库数量: {data['public_repos']}")# 打印原始文本# print(response.text)
✅ 响应头
服务器的响应头包含了关于响应的元数据,可以通过 response.headers
访问。
response = requests.get('https://api.github.com')
content_type = response.headers.get('Content-Type')
print(f"内容类型: {content_type}")
四、发送 POST 请求
POST 请求通常用于向服务器提交数据,例如提交表单或上传文件。
✅ 发送表单数据
使用 data
参数可以发送 application/x-www-form-urlencoded
格式的数据。
import requestspayload = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://httpbin.org/post', data=payload)# 打印服务器返回的表单数据
print(response.json()['form'])
✅ 发送 JSON 数据
现代 API 更倾向于使用 JSON 作为请求体格式。requests
允许你使用 json
参数直接传递一个 Python 字典,它会自动被编码为 JSON 字符串并设置正确的 Content-Type
头。
import requestspayload = {'some': 'data', 'is': 'awesome'}
response = requests.post('https://httpbin.org/post', json=payload)# 打印服务器返回的 JSON 数据
print(response.json()['json'])
五、高级用法
✅ 自定义请求头 (Headers)
有时 API 要求特定的请求头,例如 User-Agent
或 Authorization
。可以通过 headers
参数进行设置。
import requestsurl = 'https://api.github.com/some/endpoint'
headers = {'User-Agent': 'my-app/0.0.1','Authorization': 'Bearer YOUR_ACCESS_TOKEN'
}response = requests.get(url, headers=headers)
✅ 超时设置 (Timeout)
为了防止程序因网络问题而无限期等待,设置超时非常重要。timeout
参数接受一个秒数。
import requeststry:# 设置超时为 3 秒response = requests.get('https://httpbin.org/delay/5', timeout=3)
except requests.exceptions.Timeout:print("❌ 请求超时!")
✅ 会话对象 (Session)
如果你需要与同一个主机进行多次请求,使用会话对象 (Session
) 会带来性能提升。Session
对象可以跨请求保持某些参数(如 Cookies 和 Headers),并利用底层的 TCP 连接复用。
import requests# 创建一个会话对象
with requests.Session() as s:# 会话中的所有请求都会使用相同的 cookies.get('https://httpbin.org/cookies/set/sessioncookie/123456789')response = s.get('https://httpbin.org/cookies')print("会话中返回的 Cookies:")print(response.json())
六、API 交互成本与解决方案
在进行大量的 API 交互和测试时,API 的调用成本是一个不可忽视的问题。无论是使用 OpenAI、Claude 还是国内的各种大模型服务,频繁的调试和请求都会累积成一笔不小的开销。
为了帮助开发者降低这部分成本,市面上出现了一些优秀的 API 中转和聚合服务,它们通过批量采购和优化,提供了远低于官方价格的 API 调用方案。
LLM AI API 推荐 🗨️
1. 按量计算
- 官网:
https://llm-all.pro
- 优势:
- 😊 主流模型超低价:OpenAI, Claude, Gemini, Grok 等模型,价格约为官方的 1 折。
- 🤓 国内模型折扣大:豆包、千问、DeepSeek、Kimi 等,普遍享受 2-6 折 优惠。
- ☺️ 模型库全面:覆盖全球各类主流及小众模型。
2. 按次计算
- 官网:
https://fackai.chat
- 优势:
- 高性价比:提供国内外全模型,1 元可购 100 次 调用,非常适合轻量级或测试用户。
选择合适的 API 服务,可以让你在享受强大模型能力的同时,有效控制研发成本。
七、总结
requests
库凭借其出色的设计和易用性,极大地简化了 Python 中的 HTTP 编程。本文从基础的 GET/POST 请求讲起,深入探讨了响应对象、参数传递、请求头定制、超时处理和会话管理等核心功能。掌握 requests
是每一位 Python 开发者的必备技能,它将为你打开与广阔网络世界进行数据交互的大门。希望本文能为你提供一份清晰、实用的学习指南。