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

使用Python脚本读取URL文件获取响应头时提示Name or service not known

问题排查与解决

核心错误原因

socket.gaierror: [Errno -2] Name or service not known 属于域名解析失败报错,你的脚本触发该错误的常见诱因如下:

  • 读取URL时携带了多余的换行符:通过文件遍历读取的每行URL末尾默认带有\n换行符,非法的URL格式会导致requests无法正确识别域名,触发解析错误
  • URL缺失协议头:如果urls.txt里的链接没有带http://或https://前缀(比如直接写www.baidu.com),requests无法判断请求协议,也会导致域名解析失败
  • 部分URL本身为无效域名,或当前网络环境无法正常解析对应域名

修复方案

  1. 读取URL时用strip()方法去除首尾的空白字符(包含换行符、首尾多余空格等)
  2. 增加异常捕获逻辑,跳过无效URL、无Server字段的响应,避免单条请求失败导致整个脚本终止
  3. 补充请求超时配置,避免无响应的请求长时间阻塞脚本
  4. 建议使用上下文管理器with操作文件,避免文件句柄泄漏

修复后代码

import requests

# 用with上下文管理器自动处理文件关闭
with open('urls.txt','r', encoding='utf-8') as f:
    for line in f:
        # 去除首尾空白字符,跳过空行
        url = line.strip()
        if not url:
            continue
        # 可选:自动补全缺失的协议头,根据你的需求调整默认协议
        if not url.startswith(('http://', 'https://')):
            url = 'https://' + url
        print(f"当前请求URL: {url}")
        try:
            # 增加超时配置,单位为秒
            r = requests.head(url, timeout=10, allow_redirects=True)
            # 用get方法取Server字段,不存在时返回默认提示,避免KeyError
            server = r.headers.get("Server", "未找到Server字段")
            print(f"响应Server: {server}\n")
        except Exception as e:
            print(f"请求失败,错误信息: {str(e)}\n")
            continue

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:54:08