使用Python requests检测域名时如何处理连接错误并分类结果?
处理requests连接异常并分类记录域名状态
你的代码当前未处理网络连接类异常,一旦遇到connection refused、timeout这类问题会直接抛出错误中断程序。要实现分类记录正常和异常域名,需要用try-except捕获requests的相关异常,同时区分HTTP状态码的情况。
修改后的代码示例
import requests # 初始化两个列表,分别存储正常和异常的域名 working_domains = [] failed_domains = [] # 假设你的域名列表是domains_list,URL后缀是固定的URL变量 domains_list = ["example.com", "test.com", "invalid-domain.xyz"] URL = "/some-path" headers = {"User-Agent": "Mozilla/5.0"} for domain in domains_list: full_url = f"http://{domain}{URL}" try: # 发送请求并获取响应,添加超时避免无限等待 response = requests.get(full_url, headers=headers, timeout=5) if response.status_code == 200: working_domains.append(domain) print(f"{domain}: working") else: # 非200状态码归为无法正常服务的情况,记录状态码 failed_domains.append(f"{domain} (状态码: {response.status_code})") print(f"{domain}: not working (状态码: {response.status_code})") except requests.exceptions.ConnectionError: # 捕获连接拒绝、DNS解析失败等连接类错误 failed_domains.append(f"{domain} (连接错误)") print(f"{domain}: 连接错误") except requests.exceptions.Timeout: # 单独捕获请求超时异常 failed_domains.append(f"{domain} (请求超时)") print(f"{domain}: 请求超时") except requests.exceptions.RequestException as e: # 兜底捕获其他所有requests相关异常 failed_domains.append(f"{domain} (未知错误: {str(e)})") print(f"{domain}: 未知错误 - {str(e)}") # 输出最终汇总结果 print("\n=== 汇总结果 ===") print("正常工作的域名:") for domain in working_domains: print(f"- {domain}") print("\n无法正常连接的域名:") for domain in failed_domains: print(f"- {domain}")
关键说明
- 异常分层捕获:针对不同类型的网络问题分别捕获,比如连接错误、超时,最后用
RequestException兜底所有requests相关异常,避免程序中途崩溃。 - 超时控制:给
requests.get添加timeout参数,防止请求因网络问题无限挂起。 - 精细化记录:异常情况标注具体错误类型,非200状态码记录对应码值,方便后续排查问题。
- 分类存储:用两个列表分别留存正常和异常域名,便于后续统计或导出结果。
内容的提问来源于stack exchange,提问作者MrTux01
相关产品推荐
相关产品推荐

