#!/usr/bin/env python # -*- coding: utf-8 -*- """ 固定代理IP测试脚本 使用requests请求代理服务器,验证代理是否可用 """ import requests import json from damai_proxy_config import get_proxy_config, get_all_enabled_proxies def test_proxy_requests(proxy_info, target_url="http://httpbin.org/ip"): """ 使用requests测试代理IP Args: proxy_info: 代理信息字典,包含server, username, password target_url: 目标测试URL """ print(f"\n{'='*60}") print(f"🔍 测试代理: {proxy_info.get('name', 'Unknown')}") print(f" 服务器: {proxy_info['server']}") print(f" 用户名: {proxy_info['username']}") print(f" 目标URL: {target_url}") print(f"{'='*60}") # 构建代理认证信息 proxy_server = proxy_info['server'].replace('http://', '') proxy_url = f"http://{proxy_info['username']}:{proxy_info['password']}@{proxy_server}" proxies = { "http": proxy_url, "https": proxy_url } try: # 发送测试请求 print("🚀 发送测试请求...") response = requests.get(target_url, proxies=proxies, timeout=5) # 减少超时时间到5秒 if response.status_code == 200: print(f"✅ 代理测试成功!状态码: {response.status_code}") # 尝试解析IP信息 try: ip_info = response.json() print(f"🌐 当前IP信息: {json.dumps(ip_info, indent=2, ensure_ascii=False)}") except: print(f"🌐 页面内容 (前500字符): {response.text[:500]}") return True else: print(f"❌ 代理测试失败!状态码: {response.status_code}") print(f"响应内容: {response.text[:200]}") return False except requests.exceptions.ProxyError: print("❌ 代理连接错误:无法连接到代理服务器") return False except requests.exceptions.ConnectTimeout: print("❌ 连接超时:代理服务器响应超时") return False except requests.exceptions.RequestException as e: print(f"❌ 请求异常: {str(e)}") return False def test_all_proxies(): """测试所有配置的代理""" print("🎯 开始测试所有代理IP") proxies = get_all_enabled_proxies() if not proxies: print("❌ 没有找到可用的代理配置") return print(f"📊 共找到 {len(proxies)} 个代理IP") results = [] for i, proxy in enumerate(proxies, 1): print(f"\n\n{'#'*60}") print(f"# 测试进度: {i}/{len(proxies)}") print(f"{'#'*60}") success = test_proxy_requests(proxy) results.append({ 'proxy': proxy['name'], 'server': proxy['server'], 'success': success }) if i < len(proxies): print(f"\n⏳ 等待2秒后测试下一个代理...") import time time.sleep(2) # 输出测试结果汇总 print(f"\n{'='*60}") print("📊 测试结果汇总:") print(f"{'='*60}") success_count = 0 for result in results: status = "✅ 成功" if result['success'] else "❌ 失败" print(f" {result['proxy']} ({result['server']}) - {status}") if result['success']: success_count += 1 print(f"\n📈 总体成功率: {success_count}/{len(results)} ({success_count/len(results)*100:.1f}%)") # 如果有成功的代理,显示可用于小红书的代理 successful_proxies = [r for r in results if r['success']] if successful_proxies: print(f"\n🎉 以下代理可用于小红书登录发文:") for proxy in successful_proxies: print(f" - {proxy['proxy']}: {proxy['server']}") return results def test_xhs_proxy_format(): """测试适用于小红书的代理格式""" print(f"\n{'='*60}") print("🔧 测试适用于Playwright的代理格式") print(f"{'='*60}") proxies = get_all_enabled_proxies() for proxy in proxies: server = proxy['server'].replace('http://', '') # 移除http://前缀 proxy_url = f"http://{proxy['username']}:{proxy['password']}@{server}" print(f" {proxy['name']}:") print(f" 服务器地址: {proxy['server']}") print(f" Playwright格式: {proxy_url}") print() if __name__ == "__main__": print("🚀 开始测试固定代理IP") # 测试代理格式 test_xhs_proxy_format() # 测试所有代理 test_all_proxies() print(f"\n{'='*60}") print("🎉 代理测试完成!") print(f"{'='*60}")