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

Python批量检测URL报ConnectionResetError 10054错误如何解决

修复批量URL检测ConnectionResetError问题

报错原因

ConnectionResetError报错是远程服务器主动强制断开了连接,触发原因通常包含几种情况:短时间内请求频率过高被服务器限流、部分目标站点服务异常、请求缺少必要标识被服务器拦截、当前代码未做异常捕获,单个URL请求失败就直接中断整个批量任务。

修复方案

  • 新增异常捕获逻辑,单个URL请求出错时跳过该条记录,不终止整体任务
  • 增加失败重试机制,针对临时网络波动、限流等场景自动重试,提高检测准确率
  • 限制请求频率,每次请求后增加短暂延迟,避免触发站点反爬限流规则
  • 完善请求头字段,添加User-Agent模拟正常浏览器请求,降低被拦截概率
  • 兼容HTTPS协议,根据URL的scheme自动选择HTTP/HTTPS连接,避免协议不匹配导致的连接错误

修改后完整代码

import time
import http.client
from urllib.parse import urlparse

def checkUrl(url, max_retry=3):
    # 重试机制,最多重试max_retry次
    for retry_cnt in range(max_retry):
        try:
            p = urlparse(url)
            # 兼容HTTPS和HTTP
            if p.scheme == 'https':
                conn = http.client.HTTPSConnection(p.netloc, timeout=10)
            else:
                conn = http.client.HTTPConnection(p.netloc, timeout=10)
            # 添加请求头模拟浏览器
            headers = {
                'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
            }
            conn.request('HEAD', p.path if p.path else '/', headers=headers)
            resp = conn.getresponse()
            conn.close()
            return resp.status < 400
        except Exception as e:
            # 出错后等待1秒再重试
            time.sleep(1)
            continue
    # 重试全部失败返回False
    return False

all_urls = URL.objects.all()

for u in all_urls:
    my_url = u.url
    result = checkUrl(my_url)
    print(f"{my_url} 检测结果: {result}")
    # 每次请求后延迟0.5秒,可根据实际情况调整
    time.sleep(0.5)

可选优化点

  • 可以将检测结果存入URL模型对应的字段,不用只打印输出
  • 可以引入多线程提高检测效率,同时配合限流规则避免被封
  • 可以针对不同的错误类型做分类统计,方便后续分析异常原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 23:45:07