当前位置: 首页 > news >正文

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-AgentAuthorization。可以通过 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 开发者的必备技能,它将为你打开与广阔网络世界进行数据交互的大门。希望本文能为你提供一份清晰、实用的学习指南。

http://www.dtcms.com/a/393768.html

相关文章:

  • 基于Dify实现简历自动筛选过滤
  • PHP中常见数组操作函数
  • 避坑指南:鸿蒙(harmony next)APP获取公钥和证书指纹的方法
  • Java 大视界 -- Java 大数据在智能教育学习效果评估与教学质量改进中的深度应用(414)
  • 【场景题】如何解决大文件上传问题
  • 云原生复杂多变的环境中的安全防护方案
  • Python10-逻辑回归-决策树
  • 如何生成一个不会重复随机数?
  • 【精品资料鉴赏】155页WORD大型制造企业MES制造执行系统建设方案
  • 定时计划任务
  • 【脑电分析系列】第23篇:癫痫检测案例:从频谱特征到深度学习模型的CHB-MIT数据集实战
  • `CookieStore` API
  • 数据可视化的中间表方案
  • 编译运行duckdb rust插件模板extension-template-rs
  • 接口测试流程+jmeter并发+面试题(总结)
  • JMeter下载安装及入门教程
  • Oracle体系结构-Java Pool详解
  • ​​Service Worker 缓存 与 HTTP 缓存 是什么关系?
  • c++ 之三/五法则
  • 传输层协议 UDP
  • 关于类和对象(一)
  • 多人协作下的游戏程序架构 —— 分层方案
  • 机器学习中三个是基础的指标:​准确率 (Accuracy)​、精确率 (Precision)​​ 和 ​召回率 (Recall)​
  • 《Web端图像剪辑方案:Canvas API与JavaScript实现》
  • DeepSeek 登《自然》封面,OpenAI 推出 GPT-5-Codex,Notion Agent 首亮相!| AI Weekly 9.15-9.21
  • 多线程-初阶
  • 在 R 语言中,%>% 是 管道操作符 (Pipe Operator),它来自 magrittr 包(后被 dplyr 等 tidyverse 包广泛采用)
  • IMX6ULL学习笔记_Boot和裸机篇(1)--- SEGGER Embedded Studio 和 Uboot 环境搭建
  • 纯JS代码录制网页中的视频(可多线操作)
  • Javase 基础加强 —— 11 线程池