十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

python-mini-projects 之 Internet Connection Check:用 requests 检测网络连通性的最小可运行脚本

python-mini-projects 之 Internet Connection Check:用 requests 检测网络连通性的最小可运行脚本 示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载互联网连接检测是网络诊断、自动化脚本前置校验、爬虫容错等场景中的基础能力。本文基于 python-mini-projects 仓库中的 Internet_connection_check 项目从零讲解一个最小可运行的网络连通性检查脚本它的前置依赖、运行方式、底层工作原理以及从源码出发的局限与扩展方向。读完本文你将能够独立实现并部署一个基于 HTTP 请求的连通性探针并将其嵌入自己的自动化任务中作为前置检查步骤。项目概览与定位Internet_connection_check 是 python-mini-projects 仓库中一个极简的 Python 脚本示例核心文件为 internet_connection_check.py。整个项目不依赖配置文件、不需要额外目录结构单文件即可完成能否连通外网的判定。其核心思路非常简单通过向一个稳定的外部站点默认是https://www.google.com/发起 HTTP GET 请求根据请求是否抛出异常来判断当前设备是否具备访问互联网的能力。这类主动探测 异常捕获的模式是所有网络健康检查工具如 ping 监控、SLA 探针的最简原型。从仓库整体看该项目与 Check_website_connectivity批量检查多个网站可达性、Fetch HTTP status code获取指定 URL 的 HTTP 状态码、Time_to_load_website测量网页加载耗时等脚本同属网络探测主题但本项目聚焦于最单一的目标判断设备是否联网。环境前置条件根据项目的 README运行本脚本唯一的前置条件是Python 3项目说明中标注为Python3此外脚本代码头部通过import requests引入了第三方 HTTP 库因此环境中必须已安装requests。在仓库根目录的 requirementsALL.txt 中可以看到requests2.23.0的版本锁定记录可作为参考版本实际使用中安装任意较新的requests版本均可脚本仅使用了requests.get与异常类型requests.exceptions.ConnectionError这两个长期稳定的 API。安装命令参考pip install requests # 或安装仓库汇总依赖包含大量其他项目依赖如仅需本项目可跳过 pip install -r requirementsALL.txt验证环境是否就绪python3 -c import requests; print(requests.__version__)若该命令能正常打印版本号则环境已满足运行条件。运行方式与预期输出在项目目录下直接执行python3 internet_connection_check.py联网正常时终端会依次输出两行信息Attempting to connect to https://www.google.com/ to determine internet connection status. https://www.google.com/ Connection to https://www.google.com/ was successful.下图展示了脚本在联网环境下的实际运行结果注意输出末尾会额外打印一次目标 URL这是源码第 9 行print(url)的副作用详见下文源码分析断网或目标站点不可达时脚本则会输出失败信息并静默返回False不会抛出未处理的异常导致程序崩溃——这正是该脚本可放心嵌入其他程序的关键设计。源码逐段解析完整源码位于 projects/Internet_connection_check/internet_connection_check.py全文不足 30 行核心逻辑集中在internet_connection_test()函数内。1. 依赖导入与目标 URLimport requests from requests.exceptions import ConnectionError def internet_connection_test(): url https://www.google.com/ print(fAttempting to connect to {url} to determine internet connection status.)requestsPython 最流行的 HTTP 客户端库requests.get()内部基于urllib3完成 TCP 连接、TLS 握手与 HTTP 报文收发ConnectionError从requests.exceptions子模块显式导入的网络连接异常类型。requests的所有底层连接失败如 DNS 解析失败、TCP 连接被拒、超时、TLS 握手失败都会最终映射为该异常或它的子类目标 URL 被硬编码为https://www.google.com/选择知名且高可用站点的好处是只要目标不可达几乎可以断定问题出在本机网络而非目标站点。2. 请求发起与成功判定try: print(url) resp requests.get(url, timeout 10) resp.text resp.status_code print(fConnection to {url} was successful.) return True except ConnectionError as e: requests.ConnectionError print(fFailed to connect to {url}.) return False except: print(fFailed with unparsed reason.) return False这一段是脚本的心脏可拆解为三个层次发起请求requests.get(url, timeout 10)设置了10 秒超时。需要说明的是requests的超时参数是连接超时 读取超时的复合值即建立连接和读取响应的总等待上限避免在网络黑洞场景下无限期挂起成功判定脚本通过未抛出异常来判定成功。resp.text与resp.status_code两行只是为了取用响应对象属性本身并不参与判断resp.status_code仅验证响应对象可访问并未校验是否为200——换言之只要服务器返回了任何 HTTP 响应哪怕是 404、500脚本都会判定为连接成功。这一点从源码结构看是作者有意为之的简化本项目只关心有没有连通不关心响应是否符合预期异常兜底except ConnectionError捕获所有网络层失败随后的裸except:捕获其余任何未预期异常例如 URL 格式非法、SSL 证书异常等统一打印Failed with unparsed reason.并返回False保证函数在任何情况下都有确定性的返回值。从源码结构看函数返回值是布尔类型True表示连通、False表示失败便于上层程序直接作为开关量使用。3. 入口调用internet_connection_test()文件末尾直接以模块级代码调用函数因此直接运行脚本即可看到效果。但这里有一个值得一提的细节由于没有if __name__ __main__:守卫如果其他程序import本模块导入时就会立即执行一次连通性检测。在本仓库的使用方式直接python3运行下没有任何问题但作为可复用模块时这是一个值得改进的点。脚本边界与已知限制结合源码逐行分析可以发现这个最小脚本存在几个值得读者了解的边界判定标准是有响应而非响应正确如前述只要不抛异常即视为成功HTTP 状态码、内容正确性均未校验。若需要严格校验可改为assert resp.status_code 200或检查resp.ok硬编码探测目标目标站点固定为https://www.google.com/在无法访问 Google 的网络环境如部分区域网络策略限制中脚本会出现误报断网。扩展方向是把 URL 提取为命令行参数或配置文件例如复用 Check_website_connectivity 项目中从文本文件读取 URL 列表的思路缺少超时与重试的精细控制单一timeout 10同时约束连接与读取没有重试机制瞬时抖动即会判定失败。可引入requests.adapters.HTTPAdapter设置max_retries或改用urllib3的Retry策略异常处理过于宽泛裸except:会吞掉所有异常包括编程错误不利于排障生产环境建议至少捕获requests.RequestException并打印异常详情如e的__cause__或str(e)缺少__main__守卫如上一节所述影响模块复用。这些限制并非缺陷而是最小示例的必然取舍——它把网络连通性检测的核心骨架压缩到了极致方便学习者理解本质。在自动化流程中的典型用法由于internet_connection_test()返回布尔值且不会抛出未处理异常它可以被非常自然地嵌入到其他程序中。以下给出一个基于本项目模式的扩展示例在本地新建脚本即可运行不修改仓库内容import requests from requests.exceptions import ConnectionError CHECK_URL https://www.google.com/ def internet_connection_test(): try: requests.get(CHECK_URL, timeout10) return True except ConnectionError: return False except Exception as e: print(fFailed with unparsed reason: {e}) return False # 典型用法一作为任务前置开关 if internet_connection_test(): print(Network OK, start downloading...) # 执行后续网络任务 else: print(No network, abort task.) # 典型用法二断网时快速重试 retry 3 while retry 0 and not internet_connection_test(): retry - 1 time.sleep(5)这种探测 → 分支处理的模式与仓库中 Fetch_and_store_tweets、Check_website_connectivity 等需要稳定网络的脚本配合使用时尤其实用先确认连通再执行依赖网络的抓取任务可显著提升脚本健壮性。小结本文以 python-mini-projects 的 Internet_connection_check 项目 为载体完整梳理了一个基于requests的网络连通性检测脚本的依赖、运行、源码与边界。核心要点回顾运行前置Python 3 requests库一条命令即可运行internet_connection_check.py原理本质对https://www.google.com/发起带 10 秒超时的 GET 请求以是否抛出ConnectionError作为连通性判据返回值语义True连通 /False失败函数级异常兜底保证调用方永远能拿到确定结果改进方向探测目标可配置化、HTTP 状态码校验、超时与重试精细化、补充__main__守卫。对于想要进一步练习网络编程的读者仓库中同主题的 Check_website_connectivity、Fetch HTTP status code 与 Time_to_load_website 是很好的进阶续篇——从单个站点连通性走向批量探测、状态码分析与性能测量。赞分享示例工程【免费下载链接】python-mini-projectsA collection of simple python mini projects to enhance your python skills项目地址https://gitcode.com/gh_mirrors/py/python-mini-projects点击查看免费下载相关推荐网站连通性检测实战python-mini-projects 的 Check Website Connectivity 工具全解析网站连通性检测实战python mini projects 的 Check Website Connectivity 工具全解析 本篇技术指南围绕 pytho示例工程用 Python 爬取 Hacker News 头条python-mini-projects 之 Scrape_Hacker_News 脚本全解析用 Python 爬取 Hacker News 头条python mini projects 之 Scrape_Hacker_News 脚本全解析 导读 本文示例工程python-mini-projects 之 Compute_IoU手写 Intersection over Union 计算脚本实战python mini projects 之 Compute_IoU手写 Intersection over Union 计算脚本实战 IoUInterse示例工程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表