使用Python Requests访问ASP.net站点被拒,求解决方案
解决Requests访问西门子ASP.NET站点被拒绝的问题
看起来你碰到了典型的反爬拦截问题——服务器能识别出你的请求不是来自真实浏览器,所以返回了Access Denied。先别急着考虑登录认证(.ASPXAUTH),咱们先从模拟浏览器请求入手试试:
核心原因
ASP.NET站点通常会检查请求的User-Agent等头信息,同时依赖会话Cookie(比如ASP.NET_SessionId)来识别合法会话。直接请求产品页时,服务器没收到浏览器标识,也没创建会话,所以拒绝了访问。
解决步骤
- 模拟浏览器请求头
给请求添加真实浏览器的User-Agent和其他必要头,让服务器认为这是合法的浏览器访问。 - 先初始化会话
先访问站点首页,触发服务器生成会话Cookie,再请求目标产品页,保持会话一致性。
修改后的代码
import requests from bs4 import BeautifulSoup url_siemens_part = "https://mall.industry.siemens.com/mall/en/WW/Catalog/Product/5SY6310-7" # 模拟Chrome浏览器的请求头信息,你可以替换成自己浏览器的实际UA headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language': 'en-US,en;q=0.5', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1' } with requests.session() as sr: # 先访问站点首页,获取会话Cookie(比如ASP.NET_SessionId) sr.get("https://mall.industry.siemens.com/mall/en/WW/", headers=headers) # 再请求目标产品页,会话会自动携带之前获取的Cookie partUrl = sr.get(url_siemens_part, headers=headers) soup = BeautifulSoup(partUrl.content, 'html.parser') print(soup.prettify())
后续排查
如果上面的方法还是不行,再考虑以下情况:
- 站点可能启用了更严格的反爬(比如验证码、JS渲染),这时候可能需要用
selenium或者playwright模拟真实浏览器行为。 - 如果确实需要登录才能访问产品信息,那才需要获取
.ASPXAUTHCookie——你得模拟登录流程,提交账号密码表单,获取登录后的会话Cookie,再请求目标页。
内容的提问来源于stack exchange,提问作者ArturY
相关产品推荐
相关产品推荐

