如何将含多行URL的文件传入requests.get批量检测状态码
批量检测网站HTTP状态码的实现方案
完整修改代码
import argparse import requests from typing import List def get_input(prompt: str) -> str: return input(prompt).strip() def load_urls_from_file(file_path: str) -> List[str]: urls = [] try: with open(file_path, 'r', encoding='utf-8') as f: for line in f: url = line.strip() if url: # 跳过空白行 urls.append(url) except FileNotFoundError: print(f"错误:文件 {file_path} 不存在") except Exception as e: print(f"读取文件时出错:{str(e)}") return urls def check_single_url(url: str) -> None: try: response = requests.get(url, headers={"Referer":"test"}, verify=False, timeout=10) print(f"{url} - {response.status_code} OK") except requests.exceptions.RequestException as e: print(f"{url} - 请求失败:{str(e)}") def run(arguments): urls = [] # 处理单个URL参数 if arguments.url: url = arguments.url.strip() if url: urls.append(url) # 处理文件参数 elif arguments.website: urls = load_urls_from_file(arguments.website) # 无参数时提示输入 else: url = get_input("Enter URL : ") if url: urls.append(url) # 批量检测URL for url in urls: check_single_url(url) if __name__ == "__main__": parser = argparse.ArgumentParser(description="检测网站HTTP状态码") group = parser.add_mutually_exclusive_group() group.add_argument('--url', type=str, help="单个要检测的URL") group.add_argument('--website', type=str, help="包含多个URL的文件路径") args = parser.parse_args() run(args)
关键改动说明
- 命令行参数优化:用
argparse的互斥组确保--url和--website不能同时使用,避免参数冲突 - 文件读取逻辑:新增
load_urls_from_file函数,读取文件时自动跳过空白行,同时处理文件不存在、读取异常等情况 - 批量检测拆分:把单个URL检测逻辑拆成
check_single_url函数,增加超时设置和异常捕获,避免单个URL请求失败导致整个程序终止 - 输入兼容:保留原有的交互式输入功能,无命令行参数时仍可手动输入URL
使用示例
- 检测单个URL:
test.py --url http://google.com
- 批量检测文件中的URL:
test.py --website url.txt
内容的提问来源于stack exchange,提问作者eval
相关产品推荐
相关产品推荐

