Python 中的 Requests 库:轻松进行 HTTP 请求

什么是 Requests?

Requests 是一个用 Python 编写的开源 HTTP 客户端库,由 Kenneth Reitz 创建并维护。它的设计哲学是"为人类设计",强调代码的可读性和易用性。使用 Requests,你可以用几行代码完成复杂的 HTTP 操作。

"Requests is the only Non-GMO HTTP library for Python, safe for human consumption."

------ 官方网站(https://requests.readthedocs.io)

安装 Requests

Requests 不是 Python 标准库的一部分,因此需要通过 pip 安装:

python 复制代码
pip install requests

安装完成后,在 Python 脚本中导入即可使用:

python 复制代码
import requests

基本用法

1. 发送 GET 请求

GET 请求是最常见的 HTTP 方法,用于从服务器获取数据。

python 复制代码
response = requests.get('https://httpbin.org/get')
print(response.status_code)  # 输出状态码,如 200
print(response.text)         # 输出响应文本

你也可以传递查询参数(query parameters):

python 复制代码
params = {'name': 'Alice', 'age': 25}
response = requests.get('https://httpbin.org/get', params=params)
print(response.url)  # https://httpbin.org/get?name=Alice&age=25

2. 发送 POST 请求

POST 请求常用于提交表单或发送数据到服务器。

python 复制代码
data = {'username': 'Bob', 'password': '123456'}
response = requests.post('https://httpbin.org/post', data=data)
print(response.json())  # 将响应解析为 JSON

如果要发送 JSON 数据,可以使用 json 参数:

python 复制代码
json_data = {'title': 'Hello', 'body': 'World'}
response = requests.post('https://httpbin.org/post', json=json_data)

3. 处理响应内容

Requests 提供了多种方式来处理服务器返回的数据:

  • response.text:以字符串形式返回响应内容(自动解码)。
  • response.content:以字节形式返回原始内容,适合下载图片、文件等。
  • response.json():将响应解析为 Python 字典或列表(要求响应是合法 JSON)。
  • response.status_code:HTTP 状态码(如 200、404、500)。
  • response.headers:响应头信息,是一个字典。

示例:下载一张图片

python 复制代码
response = requests.get('https://example.com/image.jpg')
with open('image.jpg', 'wb') as f:
    f.write(response.content)

高级功能

1. 自定义请求头

你可以通过 headers 参数设置自定义请求头,比如伪装成浏览器访问:

python 复制代码
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.get('https://httpbin.org/headers', headers=headers)
print(response.json())

对于需要保持登录状态的场景,可以使用 Session 对象:

python 复制代码
session = requests.Session()
session.post('https://httpbin.org/login', data={'user': 'admin'})
# 后续请求会自动携带 Cookie
response = session.get('https://httpbin.org/dashboard')

3. 处理超时和异常

网络请求可能因网络问题失败,建议设置超时时间并捕获异常:

python 复制代码
try:
    response = requests.get('https://httpbin.org/delay/2', timeout=3)
except requests.exceptions.Timeout:
    print("请求超时")
except requests.exceptions.RequestException as e:
    print(f"请求出错: {e}")

4. 上传文件

使用 files 参数可以轻松上传文件:

python 复制代码
files = {'file': open('report.pdf', 'rb')}
response = requests.post('https://httpbin.org/post', files=files)

实际应用示例

假设我们要从 GitHub API 获取某个用户的公开信息:

python 复制代码
import requests

def get_github_user(username):
    url = f'https://api.github.com/users/{username}'
    response = requests.get(url)
    
    if response.status_code == 200:
        user = response.json()
        print(f"用户名: {user['login']}")
        print(f"公开仓库数: {user['public_repos']}")
        print(f"关注者: {user['followers']}")
    else:
        print("用户未找到")

get_github_user('octocat')

总结

Requests 是 Python 中最流行的 HTTP 库之一,以其简洁的语法和强大的功能赢得了广大开发者的喜爱。它极大地简化了网络请求的编写过程,使开发者能够专注于业务逻辑而非底层细节。

主要优点:

  • 语法简洁,易于学习和使用
  • 支持各种 HTTP 方法和特性(如 Sessions、Cookies、文件上传等)
  • 社区活跃,文档完善
  • 广泛应用于爬虫、API 调用、自动化测试等领域

参考资料:

相关推荐
优橙教育2 小时前
5G网优培训 vs Java开发:转行选哪个?
java·开发语言·5g
想会飞的蒲公英4 小时前
计算机怎样读取中文文本:编码、清洗与标准化
人工智能·python·自然语言处理
SeaTunnel4 小时前
从 Python Script 地狱到标准化数据集成框架
大数据·开发语言·python·程序员·代码·seatunnel
深度研习笔记4 小时前
OpenCV工业视觉实战09|项目EXE打包+工控机无环境部署+后台常驻运行,彻底脱离Python环境,完成项目最终交付
python·opencv·webpack
碎光拾影5 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
CCPC不拿奖不改名5 小时前
大模型推理架构与开源生态知识整理
数据库·windows·python·架构·langchain·开源·github
Marst Code5 小时前
(python)2026Plotly 库评估:交互式可视化到底值不值得引入?
开发语言·python
databook5 小时前
当散点图不够用时:用 t-SNE 可视化多维数据
python·数据分析·数据可视化
Miao121315 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
CRMEB系统商城7 小时前
开源自建还是SaaS订阅?算一笔3年经济账
java·大数据·开发语言·开源