Azure DevOps自托管代理调用LRE认证接口请求超时问题咨询
问题产生原因
- 代码存在明显疏漏:定义了认证请求头
Authheaders但未在requests.get方法中传入,导致请求未携带认证信息,被服务端拦截后无响应最终超时;另外代码中存在未闭合的字符串语法错误(URL='http://xxx.xx.xx.x缺少末尾单引号) - 请求特征被拦截:requests库默认的User-Agent标识为
python-requests/版本号,LRE服务端的WAF、安全规则或访问控制策略会拦截这类爬虫特征的请求,而浏览器、SOAP UI的请求UA符合正常访问特征因此可以正常返回 - 代理环境网络配置冲突:Azure自托管代理运行环境中存在系统级/用户级的代理配置、环境变量
http_proxy/https_proxy未清空,requests默认会读取这些配置,导致请求被转发到不可达的代理节点引发超时 - 权限差异:你在本地验证ping、telnet、浏览器访问时使用的是普通登录用户,而Azure自托管代理通常以服务账户身份运行,该账户可能存在网络访问限制、防火墙出站规则限制
- Azure网络规则限制:自托管代理所属的Azure资源(虚拟机/VMSS/容器实例)的NSG(网络安全组)、路由表未放通到LRE服务端80端口的出站流量,你之前的验证操作可能是在本地机器而非代理节点上执行的
排查解决方法
- 优先修复代码问题:
- 补全代码语法错误,确保URL字符串正常闭合
- 调用
requests.get时传入提前定义的请求头,新增模拟浏览器的User-Agent配置,强制禁用代理,调整超时时间,参考修改后的请求代码:
Authheaders = { 'Connection': 'keep-alive', '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', 'Host':'xxx.xx.xx.x' } # 直接使用requests内置的Basic认证方法,避免手动拼接Authorization头出错 Authresponse=requests.get( AuthURL, headers=Authheaders, auth=('你的LRE用户名', '你的LRE密码'), proxies={"http": None, "https": None}, # 强制不走任何代理 timeout=30 ) - 环境层面排查:
- 直接登录到Azure自托管代理的运行节点,使用代理服务的运行账户执行代码验证,不要在本地机器测试
- 检查代理节点的环境变量,确认
http_proxy、https_proxy、HTTP_PROXY、HTTPS_PROXY四个变量均为空 - 检查自托管代理所属Azure资源的NSG出站规则,确认放通了到LRE服务端IP 80端口的TCP流量
- 查看LRE服务端的访问日志、WAF拦截日志,确认是否存在来自自托管代理IP的请求被拦截的记录
- 若仍存在超时,在代理节点上用Wireshark/tcpdump抓取80端口的流量,确认请求是否成功发出、是否收到服务端的响应包
内容的提问来源于stack exchange,提问作者Pratik More
相关产品推荐
相关产品推荐

