未配置VPC的AWS Lambda环境访问gg.deals超时问题求解
解决AWS Lambda未配置VPC时访问gg.deals超时的问题
核心原因分析
未配置VPC的Lambda默认拥有公网访问权限,出现连接超时大概率是gg.deals的反爬/防火墙机制拦截了Lambda的AWS出口IP段——这类网站通常会识别云服务商的批量IP池并直接屏蔽,常规的requests参数调整(关闭验证、重试、超时设置)无法绕过IP级拦截。
可行解决方案
1. 模拟真实浏览器请求(补充完整请求头)
仅设置基础headers不够,需要模拟浏览器的完整请求特征:
import requests from bs4 import BeautifulSoup url = 'https://gg.deals/games/?page=1' 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/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Accept-Encoding': 'gzip, deflate, br', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', 'TE': 'Trailers' } try: response = requests.get(url, headers=headers, timeout=30) response.raise_for_status() soup = BeautifulSoup(response.text, 'html.parser') # 后续处理逻辑 except requests.exceptions.RequestException as e: print(f"请求失败: {str(e)}")
如果还是超时,说明IP拦截是核心问题,继续往下看。
2. 配置VPC+NAT网关获取固定出口IP
未配置VPC的Lambda使用AWS共享公网IP池,容易被识别。配置VPC后通过NAT网关访问公网,可获得固定出口IP:
- 创建VPC、子网、安全组(允许出站HTTPS流量)
- 创建NAT网关并绑定弹性IP(固定出口IP)
- 将Lambda配置到该VPC的子网中,路由表指向NAT网关
- 尝试将这个固定IP提交给gg.deals申请白名单(如果网站支持)
3. 使用代理服务转发请求
通过第三方代理或AWS内部代理服务切换出口IP:
- 选择支持HTTPS的代理服务,获取代理地址
- 在requests中配置代理参数:
proxies = { 'https': 'https://your-proxy-address:port' } response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
注意选择可靠的代理,避免代理本身超时或被目标网站拦截。
4. 检查Lambda执行环境限制
- 确认Lambda的执行角色拥有
lambda.amazonaws.com的基本权限,无额外网络限制 - 切换AWS区域测试:部分区域的Lambda出口IP可能未被gg.deals屏蔽
内容的提问来源于stack exchange,提问作者helllllo
相关产品推荐
相关产品推荐

