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

如何用Python requests实现Zalando商品加购并确定请求payload参数

问题解答

是否可以用requests实现Zalando加购和结账流程

理论上所有浏览器端触发的操作都可以通过requests模拟HTTP请求实现,但是Zalando有完整的反爬机制、动态参数校验,实现成本远高于Selenium,需要完整处理会话管理、动态参数提取、反爬绕过几个环节。

通用的请求payload参数判断方法

  • 第一步:打开浏览器无痕模式,启动F12开发者工具切换到「网络」面板,勾选「保留日志」选项,手动完整执行一次你需要模拟的操作(登录、加购、结账)
  • 第二步:从网络请求中过滤出对应操作的请求,先完整复制该请求的所有请求头、Cookie、payload参数,用requests直接重发该请求,确认可以得到预期响应(比如加购成功后查询购物车有对应商品)
  • 第三步:逐个删除payload中的字段,每次删除后重发请求,删除后仍能得到预期响应的为非必填字段,删除后请求失败的为必填字段,最终整理出最小必填参数集
  • 第四步:排查动态参数,所有值不固定的参数(比如你代码里的flowId、CSRF令牌、请求签名等)都需要定位来源:通常动态参数要么来自之前请求的响应HTML、要么来自前置接口的返回值、要么是前端JS加密生成,需要对应提取或模拟生成逻辑

你当前代码的核心问题

  1. 加购接口选择错误:你调用的https://www.zalando.it/api/rr/e是用户行为埋点上报接口,并非真实的加购接口,真实加购接口一般为/cart/api前缀,需要重新抓包定位正确的接口地址
  2. 动态参数写死:flowId是每次访问商品详情页生成的动态值,写死固定值无法通过校验,需要先请求商品详情页,从页面HTML或内嵌JS变量中提取当前页对应的有效flowId
  3. 缺少必要校验参数:Zalando的登录、加购、结账请求都需要携带对应CSRF令牌、完整的Cookie上下文,你当前的代码仅处理了UA,缺少其他必要的请求头和校验参数,很容易被反爬拦截
  4. 无异常校验:你没有判断登录请求、加购请求的响应状态码和返回内容,无法定位是登录失败还是加购请求失败

调试建议

  • 先跳过登录环节,先调试未登录状态下的加购逻辑,确认加购接口和参数逻辑正确后再对接登录流程
  • 如果遇到TLS指纹识别导致请求被拦截,可以替换requests为curl_cffi库,模拟真实浏览器的TLS指纹绕过检测
  • 结账环节的参数逻辑更复杂,需要逐个抓包确认地址、配送方式、支付方式对应的参数规则,逐步调试
# 修正后的基础调试代码示例
import requests
from lxml import etree

s = requests.Session()
# 补全完整浏览器请求头,避免被反爬识别
BASE_HEADERS = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'it-IT,it;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'none',
    'Sec-Fetch-User': '?1'
}
s.headers.update(BASE_HEADERS)

# 第一步:先访问商品详情页,提取动态参数
goods_url = "https://www.zalando.it/nike-sportswear-air-force-1-07-lv8-sneakers-basse-whiteblackgame-royal-ni112o0m9-a12.html"
resp = s.get(goods_url)
html = etree.HTML(resp.text)
# 提取flowId、csrf_token等动态参数,根据页面实际结构调整提取规则
# flow_id = html.xpath('//meta[@name="flow-id"]/@content')[0]
# csrf_token = html.xpath('//meta[@name="csrf-token"]/@content')[0]

# 第二步:登录逻辑,登录成功后会话会自动保留Cookie
login_headers = BASE_HEADERS.copy()
login_headers['content-type'] = 'application/json'
login_data = {
    'email' : 'myemail@gmail.com',
    'secret':'mypassword'
}
login_resp = s.post("https://accounts.zalando.com/api/login", headers=login_headers, json=login_data)
print("登录响应状态:", login_resp.status_code)
# 校验登录是否成功,比如判断响应里是否有登录成功标识

# 第三步:调用正确的加购接口,传入提取的动态参数
# add_cart_resp = s.post("实际加购接口地址", headers=login_headers, json=实际payload)

# 第四步:校验加购结果
cart_resp = s.get("https://www.zalando.it/cart/", headers=BASE_HEADERS)
print("购物车页面是否包含目标商品:", "AIR FORCE 1" in cart_resp.text)

内容的提问来源于stack exchange,提问作者Luigi V.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:24:09