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

使用Python Requests登录Zalando.it遇403错误及代理问题求助

登录请求403错误排查与修复

核心问题点及修复方案

  • 请求头配置错误

    1. Host 头需动态适配:Session初始设置的Host是www.zalando.it,但后续请求accounts.zalando.com域名时,Host会不匹配,直接触发反爬拦截。建议移除全局Host配置,让Requests自动根据目标URL生成正确的Host头。
    2. 移除冗余自定义头:x-zalando-render-page-uri和x-zalando-request-uri如果不是浏览器实际发送的请求头,不要手动添加,这类非标准头容易被识别为异常请求。
    3. 确认XSRF Token来源:部分网站的XSRF Token会放在页面meta标签而非Cookie中,建议用BeautifulSoup解析登录页面HTML,优先从类似<meta name="csrf-token" content="xxx">的标签提取,而非直接取Cookie中的frsx。
  • 登录数据格式错误
    代码中login_data的键名存在笔误:'email:'多了一个冒号,应改为'email'。同时需确认data.request和data.secret是否为浏览器实际发送的动态参数——这类参数通常从登录页面隐藏字段或login_api_schema响应中生成,而非固定值,需重新抓取验证。

  • 会话与Cookie管理问题

    1. 保留完整Cookie:不要仅提取frsx和Zalando-Client-Id,Session需保留从登录页面获取的所有Cookie,部分反爬机制会校验Cookie完整性。
    2. 跟进请求链的更新:请求login_api_schema后,检查响应是否返回新的Cookie或头信息,需同步更新到Session中。
  • 反爬行为模拟优化

    1. 添加Referer头:提交登录请求时,Referer需设置为登录页面URL(https://www.zalando.it/login/),而非首页。
    2. 还原真实请求顺序:先访问登录页面,再请求login_api_schema,最后提交登录数据,完全模拟用户操作流程。

修改后的示例代码

import requests
import data
from bs4 import BeautifulSoup

login_page_link = "https://www.zalando.it/login/"
login_api_schema = "https://accounts.zalando.com/api/login/schema"
login_api_post = "https://accounts.zalando.com/api/login"

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate',
    'DNT': '1',
    'Connection': 'close',
    'Upgrade-Insecure-Requests': '1'
}

with requests.Session() as s:
    s.headers.update(headers)
    
    # 先访问登录页面,获取完整会话信息
    r = s.get(login_page_link)
    soup = BeautifulSoup(r.text, 'html.parser')
    
    # 优先从meta标签提取XSRF Token
    xsrf_meta = soup.find('meta', attrs={'name': 'csrf-token'})
    if xsrf_meta:
        s.headers['x-xsrf-token'] = xsrf_meta.get('content')
    else:
        #  fallback到Cookie中的frsx
        cookie_dict = s.cookies.get_dict()
        if 'frsx' in cookie_dict:
            s.headers['x-xsrf-token'] = cookie_dict['frsx']
    
    # 更新XHR请求专属头
    del s.headers['Upgrade-Insecure-Requests']
    s.headers['Accept'] = 'application/json'
    
    # 提取必要的会话标识头
    cookie_dict = s.cookies.get_dict()
    if 'Zalando-Client-Id' in cookie_dict:
        s.headers['x-zalando-client-id'] = cookie_dict['Zalando-Client-Id']
    if 'X-Flow-Id' in r.headers:
        s.headers['x-flow-id'] = r.headers['X-Flow-Id']
    
    # 请求登录schema接口
    r = s.get(login_api_schema)
    
    # 设置跨域相关头
    s.headers['Origin'] = 'https://www.zalando.it'
    s.headers['Referer'] = login_page_link
    
    # 修正登录数据格式
    login_data = {
        'email': data.email,
        'request': data.request,
        'secret': data.secret
    }
    
    # 发送登录请求
    r = s.post(login_api_post, json=login_data)
    print(r.status_code)
    print(r.text)

Fiddler代理问题修复

出现SSL: WRONG_VERSION_NUMBER错误及HTTP请求301跳转的原因如下:

  • 代理URL配置错误:Fiddler作为HTTP代理,HTTPS请求的代理地址需使用HTTP协议,而非HTTPS。正确的代理配置应为:
    proxies = {
        'http': 'http://127.0.0.1:8888',
        'https': 'http://127.0.0.1:8888'
    }
    
  • SSL证书信任问题:需安装Fiddler根证书,确保Python能信任其SSL证书。测试阶段可临时关闭SSL验证(仅用于调试):
    r = s.get(login_page_link, proxies=proxies, verify=False)
    
  • 301跳转问题:Zalando强制使用HTTPS协议,所有请求需使用HTTPS URL,不要用HTTP发起请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 22:10:10