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

AWS Lambda中Python requests.get对特定网站请求超时问题

解决AWS Lambda中requests.get()请求部分URL超时的问题

可能原因分析

  • 网络配置限制:如果Lambda部署在自定义VPC内,未配置NAT网关则无法访问公网;即使在默认无VPC环境,部分网站可能屏蔽AWS公网IP段,导致请求被拦截或延迟。
  • 反爬机制拦截:nseindia.com和makemytrip.com这类网站有严格反爬策略,会识别云服务商IP并限制响应,引发超时。
  • 请求头不完整:仅设置User-Agent不足以模拟真实浏览器请求,缺少必要请求头会被识别为爬虫,导致拒绝或延迟响应。
  • Lambda超时设置不足:Lambda默认超时为3秒,即使代码里设了timeout=60,函数本身的超时限制会先触发中断。

解决方案

1. 修正Lambda网络配置

  • 若Lambda在自定义VPC中:确保所在子网关联NAT网关,并配置正确路由表,让Lambda能通过NAT网关访问公网。
  • 若Lambda在默认无VPC环境:尝试用AWS Global Accelerator为Lambda分配固定弹性IP,或通过CloudFront中转请求,规避目标网站的IP屏蔽。

2. 完善请求头,模拟真实浏览器

补充浏览器常用请求头,降低被反爬识别的概率:

import json
import requests

def lambda_handler(event, context):
    url3 = 'https://www.nseindia.com/'
    header = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.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-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'en-US,en;q=0.5',
        'Connection': 'keep-alive',
        'Upgrade-Insecure-Requests': '1'
    }
    # 使用会话保持模拟浏览器会话
    session = requests.Session()
    session.headers.update(header)
    response = session.get(url=url3, allow_redirects=False, timeout=60)
    for i in response.cookies: 
        print(i.name +"==>>", i.value)
    return

3. 调整Lambda函数超时时间

  1. 登录AWS Lambda控制台,找到目标函数。
  2. 进入配置→常规配置→编辑。
  3. 将超时时间设置为60秒或更长(最长支持15分钟),确保函数有足够时间等待响应。

4. 优先使用官方API

部分网站(如nseindia.com)提供官方API接口,建议优先使用官方API替代网页抓取,既避免触发反爬机制,也符合网站使用条款。

测试建议

  • 在Lambda中添加简单连通性测试,用requests.head()快速验证目标网站是否可达:
response = session.head(url=url3, timeout=10)
print(response.status_code)
  • 逐步添加请求头,观察请求成功率变化,定位缺失的关键请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 09:44:51