python-mini-projects 实战:用 Python 标准库 urllib + emoji 库快速抓取 HTTP 状态码
2026/9/20 14:32:19 网站建设 项目流程
  • 示例工程

【免费下载链接】python-mini-projects

A collection of simple python mini projects to enhance your python skills

项目地址:https://gitcode.com/gh_mirrors/py/python-mini-projects
点击查看免费下载

本篇技术指南基于开源仓库 python-mini-projects 中的 Fetch HTTP status code 项目,系统讲解如何使用 Python 标准库urllib结合emoji库,以极简代码实现任意 URL / API 的 HTTP 状态码抓取,并自动输出“成功/失败”表情符号与对应原因信息。读完本文,你将掌握urlopen的基本调用、HTTPErrorURLError两类异常的差异化处理,以及如何在终端脚本中输出友好、可读的请求诊断结果。

项目背景与功能定位

在调试接口、巡检网站可用性或编写运维小工具时,最基础也最刚需的一步,就是确认目标 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.0

emoji库负责把:thumbs_up::thumbs_down:这类短代码转换为实际的 Unicode 表情符号,用于在输出中直观地区分请求成功与失败。注意该版本被固定为0.6.0,如需兼容其他版本可自行调整版本号。

安装命令

在项目目录下执行:

pip install -r requirements.txt

也可以单独安装:

pip install emoji

安装完成后即可运行脚本。urllib属于 Python 标准库,无需额外安装,这保证了脚本在任意安装了 Python 的机器上都能直接运行。

使用方法

整个使用流程分为两步:

  1. 安装依赖(见上文);
  2. 运行脚本并输入目标 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 状态短语,例如OKMoved等,由服务器在响应行中携带。

同时通过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:对应的状态短语。

输出统一附加 👎 表情,表示请求失败。值得注意的是,HTTPErrorURLError的子类,因此必须将HTTPErrorexcept分支写在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
访问不存在资源HTTPErrorStatus : 404 👎/Message : Request failed. Request returned reason - Not Found
服务器内部错误HTTPErrorStatus : 500 👎/Message : Request failed. Request returned reason - Internal Server Error
域名解析失败URLErrorStatus : Errno 11001 👎/Message : getaddrinfo failed

从源码结构看,脚本对 2xx 成功响应统一显示 👍,对其他由服务器明确返回的错误码(4xx/5xx)以及网络层错误统一显示 👎,语义清晰、便于自动化巡检时快速人工判读。

扩展思路

虽然该脚本以“获取状态码”为最小目标,但其代码骨架具备良好的扩展点:

  • 超时控制urlopen支持timeout参数,可避免请求长时间挂起;
  • 携带请求头:可通过urllib.request.Request包装 URL 并附加User-AgentCookie等头信息;
  • 批量巡检:将input()改为循环读取 URL 列表文件,即可升级为网站健康检查工具;
  • 中文消息映射:可进一步建立“状态码 → 中文描述”的字典,替代英文的response.reason

这些增强均可保留现有异常处理结构,在try/except骨架内继续叠加。

小结

Fetch HTTP status code 是 python-mini-projects 仓库中一个短小精悍的入门级示例:它用不到 30 行代码演示了urllib.request.urlopen的基本用法、HTTPErrorURLError的分层异常捕获,以及第三方emoji库的简单集成。对于希望快速理解 Python HTTP 请求与异常体系的开发者而言,这是一个可直接运行、便于实验的参考实现。你可以按本文步骤安装依赖并运行python fetch_http_status_code.py,输入任意网址亲自验证输出效果。

  • 示例工程

【免费下载链接】python-mini-projects

A collection of simple python mini projects to enhance your python skills

项目地址:https://gitcode.com/gh_mirrors/py/python-mini-projects
点击查看免费下载

相关推荐

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询