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

AWS Lambda调用dan.me.uk/torlist遇403错误求助

解决AWS Lambda调用Tor节点列表接口返回403的问题

原因分析与解决方案

1. 云IP被站点反爬机制拦截

https://www.dan.me.uk/torlist/这类公共列表站点通常会屏蔽云服务商(包括AWS Lambda)的出口IP段,因为云IP常被用于批量爬取,直接触发反爬规则。

解决办法:

  • 给Lambda配置固定出口IP:将Lambda部署到VPC内,搭配NAT网关使用弹性IP,让请求的出口IP固定。若站点支持白名单申请,可将该IP提交给站点方解锁。
  • 更换稳定的Tor节点数据源:改用Tor官方提供的出口节点列表接口https://check.torproject.org/torbulkexitlist,该接口对自动化请求的兼容性更好,反爬限制更少。

2. 请求头配置不完整

仅添加User-Agent可能不足以通过站点验证,部分站点会校验Accept等其他请求头字段。

修改后的代码示例:

from urllib import request

def is_tor_ip(ip_address):
    tor_list_url = "https://check.torproject.org/torbulkexitlist"
    # 配置完整请求头模拟正常浏览器请求
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
        'Accept': 'text/plain, */*'
    }
    try:
        req = request.Request(tor_list_url, headers=headers)
        with request.urlopen(req) as response:
            tor_exit_nodes = response.read().decode('utf-8').split('\n')
            # 过滤空行避免无效匹配
            tor_exit_nodes = [node.strip() for node in tor_exit_nodes if node.strip()]
            return ip_address in tor_exit_nodes
    except Exception as e:
        print(f"Error checking Tor exit node: {e}")
        return False

3. 权限问题排除

你当前配置的Lambda角色权限均为S3相关,调用外部HTTP接口不需要额外IAM权限,因此权限不是导致403的原因,可直接排除。

额外优化建议

  • 缓存节点列表:将拉取到的Tor节点列表缓存到S3或Lambda临时存储中,设置1小时左右的过期时间,减少重复请求频率,降低触发反爬的概率。
  • 添加重试逻辑:针对临时网络波动或拦截,可添加简单的重试机制(比如最多重试2次),提升接口调用稳定性。

内容的提问来源于stack exchange,提问作者witch-of-winter

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 12:52:18