Azure部署Python/Django应用urllib请求被拦截返回403如何解决
Azure部署Django应用urllib触发403错误解决方案
1. 触发拦截的具体WAF规则
该场景下的拦截基本都来自CRS规则集中的913101规则,对应规则短标签为Scraper Detection: Typical Scraping User-Agent Header,这条规则会匹配所有脚本类工具的默认User-Agent标识,urllib默认发送的Python-urllib/3.x格式UA正好在规则匹配列表中,因此会触发403拦截。
2. 配置WAF排除规则方法
有两种安全方案,无需关闭全部WAF规则:
- 方案1(优先选择,无需修改Azure配置):修改urllib请求的User-Agent头,模拟普通浏览器请求,代码示例如下:
import urllib.request url = "你要拉取的文件地址" # 自定义UA,模拟Chrome浏览器 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" } req = urllib.request.Request(url, headers=headers) response = urllib.request.urlopen(req)
- 方案2(修改WAF配置):进入自定义WAF策略的「托管规则」页面,找到对应CRS版本下的913101规则,将其单独设置为「已禁用」;也可以添加排除规则:当请求头User-Agent包含
Python-urllib时,跳过该条规则的校验。
3. 替代请求库说明
常用替代库为requests,使用更简洁,但需注意:拦截和使用的库无关,只和请求带的User-Agent有关,就算用requests、urllib3、aiohttp等其他库,如果使用默认UA(比如requests默认UA为python-requests/2.x),依然会触发WAF拦截,只要按上述方法自定义UA,所有请求库都可以正常使用。
内容的提问来源于stack exchange,提问作者cambridgecircus
相关产品推荐
相关产品推荐

