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

登录Zalando时遭遇<Response [403]>错误,求解决方案

Zalando对接403 Forbidden错误修复方案

问题描述

对接Zalando项目时调用登录接口返回<Response [403]>错误,当前使用的登录代码如下:

def login():

    headers = {
        'authority': 'accounts.zalando.com',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'fr-FR,fr;q=0.9',
        'referer': 'https://accounts.zalando.com/authenticate?sales_channel=xxxxxxxxxxxxxxxx&amp;passwordMeterFT=true',
        'sec-ch-ua': '&quot;Not_A Brand&quot;;v=&quot;99&quot;, &quot;Google Chrome&quot;;v=&quot;109&quot;, &quot;Chromium&quot;;v=&quot;109&quot;',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '&quot;Windows&quot;',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
    }

    url = 'https://zalando.com/api'

    r = requests.get(url, headers=headers)
    #print(r.cookies.get_dict())
    #print(r.headers)


    headers = {
        'authority': 'accounts.zalando.com',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'fr-FR,fr;q=0.9',
        'cookie': r.headers['Set-Cookie'],
        'referer': 'https://accounts.zalando.com/authenticate?sales_channel=XXXXXXXXXXXXXXXX&amp;passwordMeterFT=true',
        'sec-ch-ua': '&quot;Not_A Brand&quot;;v=&quot;99&quot;, &quot;Google Chrome&quot;;v=&quot;109&quot;, &quot;Chromium&quot;;v=&quot;109&quot;',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '&quot;Windows&quot;',
        'sec-fetch-dest': 'document',
        'sec-fetch-mode': 'navigate',
        'sec-fetch-site': 'same-origin',
        'sec-fetch-user': '?1',
        'upgrade-insecure-requests': '1',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
        'x-csrf-token': r.cookies.get_dict()['Zalando-Client-Id'],
        'x-flow-id': r.headers['X-Zalando-Child-Request-Id']
    }

    params = {
        'email': 'xxx',
        'secret': 'xxxXXXXXXXXX',
    }

    response = requests.post('https://accounts.zalando.com/api/login', json=params, headers=headers)
    print(response.content)
    print(response.json())
    print(response.cookies.get_dict())
    print(response.headers)
    


login()

修复方法

1. 修正初始请求URL

首次请求的https://zalando.com/api并非Zalando认证的前置接口,应改为访问登录认证页面:

url = 'https://accounts.zalando.com/authenticate?sales_channel=xxxxxxxxxxxxxxxx&passwordMeterFT=true'

2. 使用Session管理Cookie

手动提取Set-Cookie并设置会导致Cookie格式错误,用requests.Session()自动维持会话:

def login():
    session = requests.Session()
    headers = {
        'authority': 'accounts.zalando.com',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'fr-FR,fr;q=0.9',
        'referer': 'https://accounts.zalando.com/authenticate?sales_channel=xxxxxxxxxxxxxxxx&passwordMeterFT=true',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
    }
    # 用session发送首次请求,自动保存Cookie
    r = session.get(url, headers=headers)

3. 正确获取CSRF Token

x-csrf-token不应使用Zalando-Client-Id,需从首次请求的Cookie中提取正确的CSRF字段(通常为csrf-token):

csrf_token = r.cookies.get('csrf-token')
# 若Cookie中没有,需解析响应HTML页面提取隐藏域中的CSRF值

4. 调整POST请求头

登录接口为JSON类型,需移除针对HTML页面的头部字段,添加Content-Type:

post_headers = {
    'authority': 'accounts.zalando.com',
    'accept': 'application/json',
    'accept-language': 'fr-FR,fr;q=0.9',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36',
    'content-type': 'application/json',
    'x-csrf-token': csrf_token,
}

5. 优先使用官方API

模拟前端登录易触发反爬机制,建议采用Zalando官方提供的OAuth2等认证方案,通过合法的API密钥和流程完成对接,从根源避免403拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:06:38