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

AWS Lambda(Python)运行requests.get返回403 Postman请求正常如何解决?

问题原因

Cloudflare的反爬虫机制会校验请求的多维度特征,相同请求Postman可正常返回、AWS Lambda环境触发403的常见原因如下:

  • 请求头字段不全:Postman会自动补全User-Agent、Accept、Accept-Encoding等默认请求头,你在Python代码中传入的headers通常缺失这些字段,Cloudflare识别到异常请求头特征直接拦截
  • 出口IP被标记:AWS Lambda的默认出口IP属于AWS公共IP段,大量自动化恶意请求都会使用该类IP段发起,很容易被Cloudflare提前标记为风险IP,触发拦截规则
  • TLS指纹不匹配:Python requests库默认的TLS握手指纹和正常浏览器、Postman的指纹特征存在差异,Cloudflare的TLS指纹校验会直接识别出自动化请求,返回403

解决方案

1. 补全完整请求头

将Postman中该请求的所有请求头完整复制到Python代码的headers参数中,重点补全User-Agent字段,参考示例:

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8",
    "Accept-Encoding": "gzip, deflate, br",
    "Connection": "keep-alive"
}
r_payload = requests.get(url=url, headers=headers)

2. 更换适配Cloudflare的请求库

使用专门适配Cloudflare拦截规则的cloudscraper库替代原生requests,你需要提前将cloudscraper及其依赖打包为Lambda层,修改代码如下即可:

import cloudscraper

scraper = cloudscraper.create_scraper()
r_payload = scraper.get(url=url, headers=headers)

3. 解决IP拦截问题

如果上述两种方案都无效,说明Lambda当前的出口IP已经被Cloudflare拉黑,可通过以下方式处理:

  • 为Lambda配置VPC + NAT网关,给NAT网关绑定专属弹性公网IP,保证请求出口为未被标记的静态IP
  • 引入第三方代理池,将Lambda的请求通过代理转发到目标站点,避免使用AWS原生公共IP段发起请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:03