- 示例工程
【免费下载链接】python-mini-projects
A collection of simple python mini projects to enhance your python skills
本篇技术指南基于开源仓库 python-mini-projects 中的 Fetch HTTP status code 项目,系统讲解如何使用 Python 标准库urllib结合emoji库,以极简代码实现任意 URL / API 的 HTTP 状态码抓取,并自动输出“成功/失败”表情符号与对应原因信息。读完本文,你将掌握urlopen的基本调用、HTTPError与URLError两类异常的差异化处理,以及如何在终端脚本中输出友好、可读的请求诊断结果。
项目背景与功能定位
在调试接口、巡检网站可用性或编写运维小工具时,最基础也最刚需的一步,就是确认目标 URL 返回的 HTTP 状态码(如 200、404、500)。该项目以单个 Python 文件实现这一能力,核心特点在于:
- 输入:用户通过命令行交互输入一个网址或 API 地址;
- 输出:两行结果——第一行为状态码与 emoji 表情(成功显示 👍,失败显示 👎),第二行为与状态码对应的可读消息;
- 零第三方 HTTP 框架:请求部分完全基于 Python 标准库
urllib.request,仅额外依赖emoji库用于表情输出。
从仓库结构看,该功能目录非常精简,仅包含 README.md、fetch_http_status_code.py 与 requirements.txt 三个文件,是一个适合入门 HTTP 请求与异常处理的最小完整示例。
环境准备与依赖安装
依赖清单
项目的唯一外部依赖定义在 requirements.txt 中:
emoji==0.6.0emoji库负责把:thumbs_up:、:thumbs_down:这类短代码转换为实际的 Unicode 表情符号,用于在输出中直观地区分请求成功与失败。注意该版本被固定为0.6.0,如需兼容其他版本可自行调整版本号。
安装命令
在项目目录下执行:
pip install -r requirements.txt也可以单独安装:
pip install emoji安装完成后即可运行脚本。urllib属于 Python 标准库,无需额外安装,这保证了脚本在任意安装了 Python 的机器上都能直接运行。
使用方法
整个使用流程分为两步:
- 安装依赖(见上文);
- 运行脚本并输入目标 URL:
python fetch_http_status_code.py脚本启动后会在终端提示Enter the URL to be invoked:,此时输入任意网址或 API 地址并回车,即可看到状态码与对应消息。
典型运行效果如下:
- 访问正常站点时,输出类似
Status code : 200 👍与Message : Request succeeded. Request returned message - OK; - 访问不存在的资源时,输出
Status : 404 👎与失败原因; - 访问无法解析的域名或网络不通的地址时,输出对应的
URLError诊断信息。
源码逐段解析
完整的实现位于 fetch_http_status_code.py,全文仅 22 行,逻辑分为“导入依赖—读取输入—请求与异常处理”三个部分。
1. 导入依赖与读取输入
from urllib.request import urlopen from urllib.error import URLError, HTTPError import emoji requestURL = input("Enter the URL to be invoked: ")urlopen:标准库中发起 HTTP 请求的核心函数,接受 URL 字符串并返回响应对象;HTTPError:当服务器返回 4xx / 5xx 等错误状态码时抛出的异常;URLError:更广义的网络层错误,例如域名解析失败、连接被拒绝等;emoji:第三方表情库,仅用于美化输出;input():阻塞等待用户在终端输入目标 URL,作为整个脚本的唯一参数入口。
2. 成功路径:正常响应处理
try: response = urlopen(requestURL) print('Status code : ' + str(response.code) + ' ' + emoji.emojize(':thumbs_up:')) print('Message : ' + 'Request succeeded. Request returned message - ' + response.reason)当urlopen返回 2xx / 3xx 等成功(或可接受)的状态码时,脚本从响应对象中取出两个属性:
response.code:HTTP 状态码整数值,例如 200;response.reason:HTTP 状态短语,例如OK、Moved等,由服务器在响应行中携带。
同时通过emoji.emojize(':thumbs_up:')输出 👍,直观标识请求成功。
3. 失败路径一:HTTPError(服务器明确返回错误码)
except HTTPError as e: print('Status : ' + str(e.code) + ' ' + emoji.emojize(':thumbs_down:')) print('Message : Request failed. Request returned reason - ' + e.reason)当服务器返回 404、403、500 等错误状态码时,urlopen会抛出HTTPError。此时从异常对象中提取:
e.code:服务器返回的错误状态码;e.reason:对应的状态短语。
输出统一附加 👎 表情,表示请求失败。值得注意的是,HTTPError是URLError的子类,因此必须将HTTPError的except分支写在URLError之前,否则前者会被后者提前捕获而丢失状态码信息——这正是该脚本异常处理顺序设计的巧妙之处。
4. 失败路径二:URLError(网络层错误)
except URLError as e: print('Status :', str(e.reason).split(']')[0].replace('[','') + ' ' + emoji.emojize(':thumbs_down:')) print('Message : '+ str(e.reason).split(']')[1])当域名不存在、DNS 解析失败或网络不可达时,抛出URLError。其e.reason通常是一个socket.gaierror等底层异常对象,其字符串表示形如[Errno 11001] getaddrinfo failed。脚本通过split(']')将字符串按]拆分为两部分:
- 前半部分(去掉
[后)是错误编号,如Errno 11001; - 后半部分是错误描述,如
getaddrinfo failed。
两条信息分别放入“Status”行与“Message”行输出,帮助用户快速定位是域名解析问题还是连接问题。
HTTP 状态码与脚本行为的对应关系
结合脚本逻辑,可总结出不同场景下的输入输出对应关系:
| 场景 | 异常类型 | 输出示例 |
|---|---|---|
| 访问正常页面 / API | 无异常 | Status code : 200 👍/Message : Request succeeded. Request returned message - OK |
| 访问不存在资源 | HTTPError | Status : 404 👎/Message : Request failed. Request returned reason - Not Found |
| 服务器内部错误 | HTTPError | Status : 500 👎/Message : Request failed. Request returned reason - Internal Server Error |
| 域名解析失败 | URLError | Status : Errno 11001 👎/Message : getaddrinfo failed |
从源码结构看,脚本对 2xx 成功响应统一显示 👍,对其他由服务器明确返回的错误码(4xx/5xx)以及网络层错误统一显示 👎,语义清晰、便于自动化巡检时快速人工判读。
扩展思路
虽然该脚本以“获取状态码”为最小目标,但其代码骨架具备良好的扩展点:
- 超时控制:
urlopen支持timeout参数,可避免请求长时间挂起; - 携带请求头:可通过
urllib.request.Request包装 URL 并附加User-Agent、Cookie等头信息; - 批量巡检:将
input()改为循环读取 URL 列表文件,即可升级为网站健康检查工具; - 中文消息映射:可进一步建立“状态码 → 中文描述”的字典,替代英文的
response.reason。
这些增强均可保留现有异常处理结构,在try/except骨架内继续叠加。
小结
Fetch HTTP status code 是 python-mini-projects 仓库中一个短小精悍的入门级示例:它用不到 30 行代码演示了urllib.request.urlopen的基本用法、HTTPError与URLError的分层异常捕获,以及第三方emoji库的简单集成。对于希望快速理解 Python HTTP 请求与异常体系的开发者而言,这是一个可直接运行、便于实验的参考实现。你可以按本文步骤安装依赖并运行python fetch_http_status_code.py,输入任意网址亲自验证输出效果。
- 示例工程
【免费下载链接】python-mini-projects
A collection of simple python mini projects to enhance your python skills
相关推荐
python-mini-projects 网页链接抓取实战:用 requests + BeautifulSoup 提取页面全部链接并保存
python mini projects 网页链接抓取实战:用 requests + BeautifulSoup 提取页面全部链接并保存 本技术指南以 pyth
示例工程霞鹜文楷:免费商用开源中文字体上手指南
霞鹜文楷:免费商用开源中文字体上手指南 做诗词、引文排版时,系统自带的衬线体总差一点韵味,而买来的楷体要么有授权顾虑,要么冷僻字缺失。霞鹜文楷(LXGW Wen
UI组件超快速Python标准库检查:Ruff提升代码质量的实战指南
超快速Python标准库检查:Ruff提升代码质量的实战指南 你是否还在忍受Python代码检查工具的缓慢速度?面对标准库使用不规范导致的隐性bug而束手无策?
开发工具Lint格式化静态分析CLI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考