0
点赞
收藏
分享

微信扫一扫

Python :requests 工具类

在网络时代,程序常常需要和外界 “对话”—— 调用 API 接口、下载网络数据、提交表单信息…… 但原生的网络请求库总让人觉得繁琐:处理 URL 编码、设置请求头、解析响应数据,每一步都要写大量代码。别担心,Python 的requests 工具类就是为简化网络通讯而生的 “小能手”,它把复杂的 HTTP 操作封装成简单的函数,让你用几行代码就能完成网络请求,今天就来看看它有多能干!

1. 发送 GET 请求:轻松获取网络数据

想从 API 接口获取数据?用 requests.get () 就像在浏览器地址栏输入网址一样简单:

import requests

# 发送GET请求
response = requests.get("https://api.github.com/repos/psf/requests")

# 查看响应状态码(200表示成功)
print(f"状态码:{response.status_code}")

# 解析JSON响应(自动转换为字典)
data = response.json()
print(f"仓库名称:{data['name']}")
print(f"星标数量:{data['stargazers_count']}")

只需一行requests.get(),就能完成建立连接、发送请求、接收响应的全过程。response.json()还能自动把 JSON 格式的响应内容转换成 Python 字典,省去了手动解析的麻烦,比原生的urllib库简洁太多!

2. 发送 POST 请求:向服务器提交数据

需要提交表单、上传数据?requests.post () 能帮你轻松搞定:

import requests

# 要提交的数据(字典形式)
payload = {
    "username": "test_user",
    "password": "test_pass",
    "remember_me": True
}

# 发送POST请求
response = requests.post(
    "https://httpbin.org/post",
    data=payload  # 表单数据
)

# 查看服务器收到的数据
print(response.json()["form"])

如果需要发送 JSON 格式的数据,只需把data参数换成json:

# 发送JSON数据
json_data = {"name": "Python", "version": "3.11"}
response = requests.post(
    "https://httpbin.org/post",
    json=json_data  # 自动设置Content-Type为application/json
)

不用手动设置请求头,不用处理数据编码,requests 会根据参数类型自动做好一切,让你专注于业务逻辑。

3. 设置请求头和参数:定制化请求

调用 API 时常常需要设置请求头(比如认证信息)或 URL 参数,requests 支持灵活的定制:

import requests

# 设置请求头(比如添加认证令牌)
headers = {
    "Authorization": "Bearer YOUR_TOKEN",
    "User-Agent": "My Python Program"
}

# 设置URL参数(自动拼接到URL后面)
params = {
    "page": 1,
    "per_page": 10,
    "sort": "created"
}

# 发送带头部和参数的GET请求
response = requests.get(
    "https://api.github.com/users/octocat/repos",
    headers=headers,
    params=params
)

print(f"请求的URL:{response.url}")  # 查看最终的URL
print(f"返回的仓库数量:{len(response.json())}")

参数会自动拼接到 URL 中(比如变成?page=1&per_page=10),请求头会正确传递给服务器,不用手动拼接字符串,既安全又高效。

4. 处理文件下载:轻松保存网络资源

想下载图片、文档等文件?requests 能帮你流式获取内容,避免占用过多内存:

import requests

# 下载图片
url = "https://www.python.org/static/img/python-logo.png"
response = requests.get(url, stream=True)  # stream=True启用流式下载

# 检查请求是否成功
if response.status_code == 200:
    # 保存文件(按字节写入)
    with open("python_logo.png", "wb") as f:
        for chunk in response.iter_content(chunk_size=1024):
            if chunk:  # 过滤空块
                f.write(chunk)
    print("图片下载完成")

stream=True让 requests 不会一次性把整个文件加载到内存,而是分块读取,特别适合下载大文件。iter_content(chunk_size)可以指定每次读取的字节数,平衡效率和内存占用。

5. 处理异常:让请求更稳健

网络请求难免遇到错误(比如超时、连接失败),requests 提供了完善的异常处理机制:

import requests
from requests.exceptions import RequestException, Timeout

try:
    # 设置超时时间(5秒)
    response = requests.get(
        "https://example.com",
        timeout=5
    )
    response.raise_for_status()  # 4xx/5xx状态码会抛出异常
except Timeout:
    print("请求超时!")
except RequestException as e:
    print(f"请求出错:{e}")
else:
    print("请求成功!")

timeout参数避免程序无限等待,raise_for_status()把 404、500 等错误状态码转换成可捕获的异常,让你的程序面对网络问题时更稳健。

总结:网络请求的 “瑞士军刀”

requests 工具类用简洁的 API 封装了复杂的 HTTP 操作,无论是 GET/POST 请求、设置参数头、下载文件,还是处理异常,都能轻松应对。它就像一把网络请求的瑞士军刀,小巧灵活却功能强大,让你告别繁琐的底层操作,专注于数据处理和业务逻辑。

如今,几乎所有 Python 网络相关的项目都离不开 requests,它早已成为事实上的标准网络库。下次需要和 API 交互、下载网络资源时,记得请出这位 “网络通讯小能手”,让网络请求变得像调用函数一样简单!

举报

相关推荐

0 条评论