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

如何检测首个可用代理并建立连接,成功后执行任务并终止程序

实现首个可用代理检测并执行操作的解决方案

你的核心需求是找到第一个能成功建立连接的代理,执行指定操作后直接退出,失败则尝试下一个代理。原代码的问题在于异常捕获范围错误,且存在无意义的无限循环,以下是修正后的实现:

修正后的代码

import requests
import sys
from Proxy_List_Scrapper import Scrapper, Proxy, ScrapperException

ALL = 'ALL'
scrapper = Scrapper(category=ALL, print_err_trace=False)
data = scrapper.getProxies()
test_url = 'http://api.ipify.org'

# 遍历代理列表,逐个测试
for item in data.proxies:
    proxy_addr = f'{item.ip}:{item.port}'
    proxies = {"http": proxy_addr, "https": proxy_addr}
    try:
        # 添加超时避免请求挂起,超时时间可根据需求调整
        page = requests.get(test_url, proxies=proxies, timeout=5)
        page.raise_for_status()  # 捕获HTTP状态码错误(如403、500等)
        
        # 连接成功,执行你的指定操作
        print(f'找到可用代理:{proxy_addr},当前IP:{page.text}')
        # --------------------------
        # 在这里添加你的指定操作代码
        # 例如:requests.get("目标网址", proxies=proxies)
        # --------------------------
        
        # 执行完操作后退出程序
        sys.exit(0)
    except (requests.exceptions.ProxyError, 
            requests.exceptions.ConnectTimeout,
            requests.exceptions.HTTPError):
        print(f'代理 {proxy_addr} 不可用,尝试下一个')

# 所有代理都测试失败时的提示
print('所有代理均无法连接')

关键修改说明

  • 精准异常捕获:将try-except放到循环内部,单个代理失败时仅跳过当前代理,不中断整个遍历流程。同时扩展捕获范围,覆盖连接超时、HTTP错误等常见问题。
  • 移除无限循环:原代码的while True会重复遍历代理列表,不符合"找到首个可用代理即退出"的需求,直接遍历一次即可。
  • 添加超时控制:给requests.get设置timeout参数,避免请求因网络问题长时间挂起。
  • 明确退出逻辑:成功执行操作后用sys.exit(0)直接终止程序,无需继续遍历剩余代理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:10:46