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

Postman调用Wizzair API与浏览器返回结果不同的问题排查

问题描述

我正在开发一款调用Wizzair API的应用,发现/api/search/search接口在浏览器中可返回符合参数的航班列表JSON响应,但使用Postman复制浏览器开发者工具中完全相同的请求头与请求体调用该接口时,却得到428响应。

参考页面:Wizzair航班预订页(LTN到VIE,2022-07-23出发,2022-08-05返程)

请求头

Host: be.wizzair.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:101.0) Gecko/20100101 Firefox/101.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://wizzair.com/
Content-Type: application/json;charset=utf-8
X-RequestVerificationToken: <token>
Content-Length: 254
Origin: https://wizzair.com
Connection: keep-alive
Cookie: <some_cookies>
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
TE: trailers

请求体

{"isFlightChange":false,"flightList":[{"departureStation":"LTN","arrivalStation":"VIE","departureDate":"2022-07-24"},{"departureStation":"VIE","arrivalStation":"LTN","departureDate":"2022-08-05"}],"adultCount":1,"childCount":0,"infantCount":0,"wdc":true}

Postman返回的428响应

{"sec-cp-challenge": "true","provider":"crypto","branding_url_content":"/_sec/cp_challenge/crypto_message-3-7.htm","chlg_duration":30}
原因分析与解决方案

原因

Wizzair的API启用了反爬虫/人机验证机制:浏览器能正常请求是因为会自动处理页面加载时的隐性验证流程(比如JS生成验证标识、Cookie动态更新),而Postman直接发送请求时,缺少验证流程生成的关键标识,被服务器判定为非人类请求,返回428要求完成验证。

解决步骤

  1. 完整复刻浏览器请求上下文

    • 不要只复制单次请求的头和体,先在浏览器中打开航班预订页,全程捕获Cookie变化,确保Postman使用的Cookie包含验证流程生成的所有标识(如sec-cp-*类Cookie)。
    • 确认X-RequestVerificationToken为最新值:该Token通常在页面加载时从HTML生成,会话内可能更新,需保证Postman使用当前会话的有效Token。
  2. 模拟浏览器完整请求流程

    • 先发送GET请求访问航班预订页面,获取并保存响应中的Cookie和X-RequestVerificationToken。
    • 用获取到的Cookie和Token发送/api/search/search的POST请求,确保Referer、Origin等请求头参数与浏览器完全一致。
  3. 处理人机验证挑战

    • 若仍返回428,说明服务器要求显性验证。需访问响应中branding_url_content指向的验证页面,完成页面内的验证流程(如加密值计算、验证按钮交互),获取验证后更新的Cookie,再重新发送航班搜索请求。
    • 注意:这类验证依赖浏览器JS执行环境,Postman无法直接处理,可使用Puppeteer、Playwright等自动化工具模拟浏览器完成验证后,提取有效参数到Postman中。
  4. 核对请求细节

    • 确保Postman的请求编码、压缩设置与浏览器一致(如Accept-Encoding中的gzip/deflate/br,需开启对应解码选项)。
    • 检查请求体JSON格式完全一致,无多余空格或换行;若手动设置Content-Length,需与实际请求体长度匹配(Postman通常会自动计算,无需手动设置)。

内容的提问来源于stack exchange,提问作者This-is-patriiick

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:54:22