使用Dio获取服务器响应时遇到问题
解决Dio 5.4.1请求返回JS跳转代码的问题
返回的window.onload=function(){window.location.href="/lander?codes=privacy-policy%2Cuser-agreement%2Crecharge-page%2Ctrading-rule%2Ccustomer-service"}是服务器的跳转逻辑,说明你的请求未通过服务器校验,以下是具体解决方法:
模拟浏览器请求头
服务器通常会校验User-Agent判断是否为合法客户端,给Dio添加标准浏览器UA:dio.options.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36';若目标接口有Referer校验,补充对应Referer头:
dio.options.headers['Referer'] = '目标页面的URL';携带合规Cookie
如果服务器需要会话验证,先通过浏览器访问目标站点获取有效Cookie,添加到Dio请求头:dio.options.headers['Cookie'] = '从浏览器复制的Cookie字符串';也可以使用
cookie_jar插件配合Dio的CookieManager自动管理Cookie,避免手动维护。检查请求合法性
确认请求的HTTP方法(GET/POST)、参数(查询参数/表单数据)是否与接口文档完全匹配,避免漏传必要参数导致服务器拒绝正常响应。禁用自动重定向排查
Dio默认会自动跟随3xx重定向,禁用后可查看原始响应的跳转目标,定位校验逻辑:dio.options.followRedirects = false; dio.options.validateStatus = (status) => status! < 500; // 允许处理3xx状态码之后查看响应头的
Location字段,明确服务器跳转意图后针对性处理。应对反爬验证
若服务器有反爬机制(如验证码、签名Token),需先完成对应验证流程,获取验证凭证后再携带凭证发起请求。
内容的提问来源于stack exchange,提问作者Am Koem Heang
相关产品推荐
相关产品推荐

