Python Requests POST请求与浏览器返回内容不一致问题排查
乌拉圭环境部潮汐数据抓取失败的排查要点
- 严格匹配表单参数顺序与Content-Type:JSF后端对参数顺序敏感,务必把浏览器抓包得到的所有参数按原顺序放入POST数据,不要自行排序。同时确认
Content-Type头是application/x-www-form-urlencoded; charset=UTF-8,和浏览器提交的完全一致。 - 确保ViewState与会话绑定:必须用
requests.Session()维持会话,先GET页面获取最新的javax.faces.ViewState和Cookie,再用同一个Session发送POST请求。单独的GET和POST会导致会话不关联,ViewState失效。 - 补全所有JSF隐藏参数:除了
javax.faces.ViewState,浏览器提交的表单里还有javax.faces.partial.ajax、javax.faces.source、javax.faces.partial.execute这类隐藏参数,这些是JSF框架必须的,漏一个都可能导致请求被拒绝。 - 设置正确的Referer头:POST请求的
Referer必须设为目标页面的完整URL:https://www.ambiente.gub.uy/SIH-JSF/paginas/sdh/consultaHDMCApublic.xhtml,部分网站会验证请求来源是否合法。 - 校验时间参数格式:潮汐查询的时间范围参数要和浏览器提交的完全一致,比如是
DD/MM/YYYY还是带时分秒的格式,同时注意乌拉圭使用UTC-3时区,确保时间参数符合当地时区要求。 - 复制浏览器完整User-Agent:不要用简化的User-Agent,直接复制你浏览器的完整UA字符串(比如Chrome的
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36),避免被识别为非浏览器请求。 - 检查AJAX请求标识:如果浏览器是通过AJAX提交,POST参数里会有
javax.faces.partial.ajax=true,同时请求头要加X-Requested-With: XMLHttpRequest,必须完全匹配AJAX请求的参数和头信息。
内容的提问来源于stack exchange,提问作者diegoese
相关产品推荐
相关产品推荐

