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

AWS Lambda Python发送HTTPS请求到EC2 IIS返回401 Unauthorized问题

问题排查与解决方案

从你提供的IIS日志可以看到,请求的用户字段为空,说明请求未携带IIS要求的身份凭证,这是401错误的直接原因。相同请求在浏览器可正常返回,通常是以下几种原因导致,可逐一排查:

  • IIS启用了浏览器默认支持的身份验证机制,requests默认不会自动处理
    最常见的是IIS开启了Windows集成身份验证(NTLM/Kerberos),浏览器在域环境或信任站点配置下会自动传递当前用户的身份凭证,requests默认不会携带这类凭证,需要额外配置:
    1. 如果是NTLM认证,需要先在Lambda的部署包中安装requests_ntlm依赖,再修改代码如下:
    import requests
    from requests_ntlm import HttpNtlmAuth
    
    # 替换为实际的域名、用户名、密码
    r = requests.get('https://example.com/test/validate', 
                     auth=HttpNtlmAuth('域名\\用户名','密码'))
    
    1. 如果是基本认证(Basic Auth),直接传递auth参数即可:
    r = requests.get('https://example.com/test/validate', auth=('用户名', '密码'))
    
  • 请求缺少必要的Header,IIS做了校验
    浏览器默认会自动携带User-Agent、Accept等标准请求头,部分IIS站点会拦截缺少这类头的请求,可模仿浏览器的请求头补充后重试:
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.45 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
    }
    r = requests.get('https://example.com/test/validate', headers=headers)
    
    若之前在浏览器登录过该站点,浏览器还会自动携带有效会话Cookie,你可以将浏览器请求中的Cookie复制到请求头测试,如果测试通过,说明站点依赖会话认证,需要先调用登录接口获取有效Cookie后再携带发起请求。
  • IP访问限制伪装返回401
    确认Lambda的出口IP(日志中记录的52.1.2.3)是否在IIS的IP允许白名单中,部分站点配置IP拦截后会返回401伪装错误避免暴露拦截规则,将Lambda出口IP加入IIS允许列表即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:54:01