You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重构def函数以读取界面输入的URL并检测站点可用性?

重构URL可用性检测函数的解决方案

原代码存在的问题

  • 直接遍历输入字符串的每个字符,而非拆分后的单个URL
  • 未处理网络请求异常(如无效URL、网络断开、超时等)
  • 每次检测结果单独弹出对话框,操作繁琐
  • 未处理URL缺少http://或https://前缀的情况,会导致请求失败

重构后的完整代码

import requests
import re
import tkinter
from tkinter import *
from tkinter import messagebox


def SiteCheck():
    # 清空结果框
    result_text.delete(1.0, END)
    # 获取输入的文本并分割成URL列表
    input_text = weight_tf.get("1.0", END).strip()
    if not input_text:
        messagebox.showwarning("提示", "请输入要检测的URL")
        return
    
    # 按换行、逗号、空格分割URL,过滤空字符串
    urls = [url.strip() for url in re.split(r'[\n, ]+', input_text) if url.strip()]
    
    for url in urls:
        # 补全URL前缀
        if not url.startswith(('http://', 'https://')):
            url = f'https://{url}'
        
        try:
            # 设置超时,避免长时间阻塞
            response = requests.get(url, timeout=5)
            if response.status_code == 200:
                result_text.insert(END, f"✅ {url} - 可用 (状态码: {response.status_code})\n")
            else:
                result_text.insert(END, f"⚠️ {url} - 不可用 (状态码: {response.status_code})\n")
        except requests.exceptions.RequestException as e:
            result_text.insert(END, f"❌ {url} - 请求失败: {str(e)}\n")
        # 更新界面,避免卡顿
        result_text.update()


window = Tk()
window.title("SiteChecker")
window.geometry('600x400')
frame = Frame(
    window,
    padx=10,
    pady=10
)
frame.pack(expand=True, fill=BOTH)

# 输入标签和文本框(改用Text控件支持多行输入)
weight_lb = Label(
    frame,
    text="输入要检测的URL(每行/逗号/空格分隔):"
)
weight_lb.grid(row=0, column=0, sticky=W)

weight_tf = Text(
    frame,
    height=8,
    width=60
)
weight_tf.grid(row=1, column=0, columnspan=2, pady=5)

# 检测按钮
cal_btn = Button(
    frame,
    command=SiteCheck,
    text='开始检测',
    width=15
)
cal_btn.grid(row=2, column=1, sticky=E)

# 结果展示区域
result_lb = Label(
    frame,
    text="检测结果:"
)
result_lb.grid(row=3, column=0, sticky=W, pady=(10,0))

result_text = Text(
    frame,
    height=10,
    width=60,
    state=NORMAL
)
result_text.grid(row=4, column=0, columnspan=2)

window.mainloop()

关键修改说明

  • 把输入控件从Entry改为Text,支持多行输入URL,更符合使用习惯
  • 使用正则表达式分割输入文本,兼容换行、逗号、空格作为分隔符
  • 添加URL前缀补全逻辑,避免因缺少http/https导致请求失败
  • 加入异常捕获,处理各种网络请求错误(超时、连接失败等)
  • 使用Text控件展示所有检测结果,替代多次弹窗,提升体验
  • 设置请求超时时间,避免界面长时间阻塞
  • 每次检测前清空结果框,保证结果展示清晰

内容的提问来源于stack exchange,提问作者EvgeniyMEV

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:01:33