声明
本文章中所有内容仅供学习交流,相关链接做了脱敏处理,若有侵权,请联系我立即删除!
aHR0cHM6Ly93d3cuZmFuZ2RpLmNvbS5jbi9vbGRfaG91c2Uvb2xkX2hvdXNlX2xpc3RfZGV0YWlsMi5odG1sP2lkPWI5YjhmMjVkNjM2ODRiYjM
流程分析
第一次访问
第一次访问返回412,然后获取到这个content值,ts代码以及外链js

第二次访问
接着就是补环境拿到加密cookie值。取请求同一个接口

其中
UA1L1zGonajvO是第一次请求412时候返回cookie值,然后补环境也需要用到。UA1L1zGonajvP就是补环境得到值
这里返回了新content,ts代码以及外链js
通过这里再去执行加密逻辑得到cookie再去请求数据接口,就可以拿到数据
第三次访问


当然这里我们知道它包含了后缀值XJlCTRRM
通过重写XMLHttpRequest.prototype.open方法就可以看到后缀值
javascript
let requ_param
XMLHttpRequest = function(){};
XMLHttpRequest.prototype.open = function(method, url, args){
console.log("XMLHttpRequest open method:", method, url);
requ_param = url;
return {}
};
function get_curr(_url){
const urls = new URL(_url);
const pathname = urls.pathname;
const search = urls.search;
const path = pathname + search;
const g = new XMLHttpRequest();
g.open('POST', path, true);
return "result:" + requ_param;
}
// const final_param = get_curr('https://www.fangdi.com.cn/oldhouse/selectOldHouseInfo3.action');
const final_param = get_curr('https://www.fangdi.com.cn/oldhouse/searchContactInfo.action');
这样就可以得到后缀值。
这里请求时候
UA1L1zGonajvO依旧是第一次返回
UA1L1zGonajvP第二次请求返回新数据通过加密得到
必坑:
- 瑞数6对后缀的校验规则:"要么不携带,只要携带了就必须有效",无效后缀直接返回400;
- 若"无后缀200、带后缀400",大概率是环境问题;
- 若"无后缀和带后缀都400",说明瑞数开启强校验,需补更复杂的环境(如canvas指纹、webgl信息等),后续案例补充。
通过上面方法拿到后缀之后请求数据接口返回400,不携带后缀返回200,那么就是补环境有问题。看看location里面包含链接值,改为对应数据可用。
有的时候没有强校验后缀就可以试着不携带后缀请求,依旧能拿到数据