news 2026/10/11 1:25:47

【零基础上手】如何用 requests 发出你的第一个 HTTP 请求:三步实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【零基础上手】如何用 requests 发出你的第一个 HTTP 请求:三步实战指南

【零基础上手】如何用 requests 发出你的第一个 HTTP 请求:三步实战指南

【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests

当你需要抓一个接口的数据、或者调用外部 API 时,用标准库 urllib 写起来又长又难读。这篇文章用三步带你用 requests 这个 Python HTTP 请求库走完安装、发请求到处理错误的完整流程。

为什么用 requests 发 HTTP 请求:四个让你少写代码的理由

读完这节,你能给同事讲清楚“为什么发请求用 requests 而不是 urllib”。

  • 为人写的接口:官网那句口号翻译成大白话就是“面向人类”,每种请求方式对应一个方法,不用手工拼 URL、手工处理编码。
  • 代码短一半:GET、POST、PUT、DELETE 都是一行调用,同样任务 urllib 要十几行,这里三行就够。
  • 报错分好类:超时、连不上、状态码异常各有一个专门的异常类型,捕错时不用猜。
  • 会话能复用:一个 Session 对象可以连续发多个请求,自动带着 Cookie,适合登录后继续操作的场景。

requests 最快安装步骤:两条 pip 命令就能跑

读完这节,你能在终端完成 requests 的安装,并确认装好了。

python -m pip install requests python -m pip install --upgrade requests # 已装过就先升到最新版

想要最新开发源码的话,也可以 git clone 后装:git clone https://gitcode.com/GitHub_Trending/re/requests,进目录再执行python -m pip install .。

requests 入门教程第一步:三行代码发出第一个 HTTP 请求

读完这节,你能发出一个真实的 GET 请求,并看懂服务器给你的回应。

import requests r = requests.get("https://api.github.com/events") print(r.status_code) # 状态码:服务器返回的回执,200 即成功 print(r.text[:80]) # 响应正文的前 80 个字符

status_code就是回执:200 表示成功,404 表示地址不存在,500 表示服务器那边出了状况。r.text是文本正文,如果接口返回 JSON,直接调r.json()就能拿到字典,不用自己解析。

requests 使用示例:三个高频 HTTP 请求场景,照抄就能跑

读完这节,你能应付日常最常见的三种情况:带查询参数、提交数据、自定义请求头。

params 传参:参数放进字典,URL 不会写乱

把参数写成字典,requests 会自动拼到 URL 后面并做好编码:

params = {"key1": "value1", "key2": "value2"} r = requests.get("https://httpbin.org/get", params=params) print(r.url) # 末尾自动带上 ?key1=value1&key2=value2

POST 提交:表单和 JSON 各一行

r = requests.post("https://httpbin.org/post", data={"name": "requests"}) r = requests.post("https://httpbin.org/post", json={"name": "requests"}) print(r.status_code)

data提交的是表单格式,json提交的是 JSON 格式,服务端要求哪个就用哪个。

请求头自定义:让服务器知道你是谁

请求头就是随请求附带的附加信息,有些接口不写 User-Agent 会直接拒收:

headers = {"User-Agent": "my-app/1.0"} r = requests.get("https://api.github.com", headers=headers, timeout=3) print(r.status_code)

顺手加上timeout=3:服务器 3 秒不回应就中断,避免程序一直卡死在那里。

requests 超时、连接错误怎么办:可直接套用的 try/except 模板

读完这节,你能把请求代码包上错误处理,网络一抖动程序也不会直接崩。

try: r = requests.get(url, timeout=3) # 3 秒超时 r.raise_for_status() # 4xx/5xx 会抛出 HTTPError except requests.exceptions.HTTPError as e: print("HTTP 错误:", e) except (requests.exceptions.ConnectionError, requests.exceptions.Timeout) as e: print("网络错误:", e)

raise_for_status()是关键:不调用它,404 的响应看起来也像成功。requests 的异常都继承自RequestException,想兜底时用它接住全部即可。

报错原因与处理
ConnectionError断网或域名找不到,先查网络,必要时重试
Timeout服务器太慢,调大 timeout 值或降低请求频率
HTTPError状态码 ≥ 400,看数字定位:404 查地址、429 被限流、500 是服务端问题

玩转 requests 之后:四个进阶能力和学习入口

读完这节,你知道下一步能学什么、去仓库哪里找资料。

  • 会话保持:创建requests.Session(),连续请求复用连接,Cookie 自动携带。
  • 文件上传:用files参数传本地文件,自动组装成 multipart 表单。
  • 代理:proxies参数指定代理服务器,请求走它出去。
  • SSL 验证:verify传自定义证书路径,调试期也可以临时关闭。

细节展开想深入可以看 docs/user/advanced.rst,快速上手的完整版示例在 docs/user/quickstart.rst;仓库里的单元测试是现成的案例库,翻翻 tests/test_requests.py 就能看到真实项目怎么写请求。

小结:把全文串成三步

这篇文章带你走完了四步:装好 requests、发出第一个请求、练了三个高频场景、再给请求套上错误处理。下一步你可以随手找一个接口地址,在终端发一个 GET 请求并打印它的状态码,再把 timeout 改掉一次试试。做到这些,requests 就能真正用在你的项目里了 🐍

【免费下载链接】requestsA simple, yet elegant, HTTP library.项目地址: https://gitcode.com/GitHub_Trending/re/requests

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 1:25:29

sqllite不同的数据库内容进行

一个一个执行--先执行(需要新增到当前的) ATTACH DATABASE E:\桌面\DICOM\Archive.db AS source_db;--确认能看到源数据库中的表: SELECT name FROM source_db.sqlite_master WHERE typetable;--执行数据合并 INSERT OR IGNORE INTO main.Stu…

作者头像 李华
网站建设 2026/10/11 1:25:21

可复用Python GAN工程包:绕过90%初学者崩溃现场

简介:本资源是一份面向深度学习初学者与实践者的生成对抗网络(GAN)入门级Python实现项目,聚焦GAN核心原理的代码化呈现与可视化验证,帮助读者理解判别器与生成器的协同博弈机制。压缩包共11个文件,含5张训练…

作者头像 李华
网站建设 2026/10/11 1:22:54

目标检测实战:钓鱼数据集从VOC转YOLO到YOLOv8训练全流程

简介:面向计算机视觉与目标检测开发者的钓鱼行为识别数据集,主要服务于水域安全监控、智能钓鱼预警以及违规垂钓行为识别等实际场景。压缩包共2000个文件,包含1000张jpg原始图像、999份xml标注文件以及1份txt说明,整体大小约21.4M…

作者头像 李华
网站建设 2026/10/11 1:22:19

halcon7

检测一维码read_image (Image, C:/Users/renre/Desktop/s8.bmp) *设置图形对象的绘制模式为仅显示轮廓(边缘),不填充内部区域 填充为fill dev_set_draw (margin) *设置后续绘制的图形颜色设置为绿色 dev_set_color (green)* 1 核心算子 创建…

作者头像 李华