在脚本中添加对响应码304的检测。以下是一个改进后的脚本,它会检测响应码是否为200或304,并在输出结果中标记这些状态码。

url批量测试改进版_Code

批量探测响应码(支持200和304)的Python脚本
import argparse
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed
from tqdm import tqdm
import time

def check_url(url):
    """检测单个URL的状态码"""
    try:
        response = requests.head(
            url, 
            timeout=10,
            allow_redirects=True,
            headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)'}
        )
        return (url, response.status_code, None)
    except requests.exceptions.RequestException as e:
        return (url, None, str(e))

def batch_check(urls, max_workers=50):
    """批量检测URL"""
    results = []
    with ThreadPoolExecutor(max_workers=max_workers) as executor:
        futures = {executor.submit(check_url, url): url for url in urls}
        with tqdm(total=len(urls), desc="Processing URLs") as pbar:
            for future in as_completed(futures):
                result = future.result()
                results.append(result)
                pbar.update(1)
    return results

def main():
    parser = argparse.ArgumentParser(description='批量HTTP状态码检测工具')
    parser.add_argument('-i', '--input', required=True, help='输入文件路径(包含URL列表)')
    parser.add_argument('-o', '--output', default='results.csv', help='输出文件路径')
    args = parser.parse_args()

    # 读取输入文件
    with open(args.input) as f:
        urls = [line.strip() for line in f if line.strip()]

    # 执行检测
    start_time = time.time()
    results = batch_check(urls)
    
    # 写入结果
    with open(args.output, 'w') as f:
        f.write("URL,Status Code,Error\n")
        for url, status, error in results:
            f.write(f'"{url}",{status if status else ""},"{error if error else ""}"\n')

    # 统计结果
    success_200 = sum(1 for r in results if r[1] == 200)
    success_304 = sum(1 for r in results if r[1] == 304)
    total_success = success_200 + success_304
    print(f"\n检测完成!耗时:{time.time()-start_time:.2f}s")
    print(f"总数量:{len(urls)} | 有效200:{success_200} | 有效304:{success_304} | 总成功率:{total_success/len(urls)*100:.1f}%")

if __name__ == '__main__':
    main()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
使用说明
  1. 安装依赖
pip install requests tqdm
  • 1.
  1. 准备URL列表文件(每行一个URL):
http://example.com
https://www.google.com
https://invalid-domain.abc
  • 1.
  • 2.
  • 3.
  1. 运行脚本
python checker.py -i urls.txt -o result.csv
  • 1.
功能特点
  1. 高效并发
  • 使用HEAD方法(比GET更节省资源)
  • 默认50线程并发(可通过修改max_workers调整)
  • 自动处理重定向(allow_redirects=True)
  1. 智能处理
  • 超时自动跳过(timeout=10秒)
  • 自动添加浏览器UA头
  • 错误分类记录(超时/DNS解析失败/连接拒绝等)
  1. 结果输出
  • CSV格式保存完整结果
  • 控制台显示实时进度和统计摘要
  • 错误信息明确分类
  1. 扩展性
  • 支持HTTP/HTTPS协议
  • 可轻松扩展检测规则(如检查其他特定状态码)
  • 支持自定义超时和重试机制
输出示例
URL,Status Code,Error
"http://example.com",200,""
"https://www.google.com",304,""
"https://invalid-domain.abc",,"HTTPSConnectionPool(host='invalid-domain.abc', port=443)"
  • 1.
  • 2.
  • 3.
  • 4.
进阶用法
  • 添加重试机制
from tenacity import retry, stop_after_attempt, wait_exponential

@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1))
def check_url(url):
    ...
# 需要额外安装:pip install tenacity
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.

这个脚本将帮助你批量检测URL的状态码,并标记出响应码为200和304的URL。希望这对你有帮助!