分析携程js

HingW 2015-10-23 05:29:21
想要抓取携程上的机票数据,开始用HtmlUnit进行抓取没有成功,会报not javascript skipping execute
所以我准备分析携程上的网页后来我找到了携程在页面加载后获取机票数据的ajax请求,先给截图

我想携程应该是用几个字段来验证请求的,其中CK和其他的一些与机票信息无关的数据应该都是后台生成的

var url = "http://flights.ctrip.com/domesticsearch/search/SearchFirstRouteFlights?DCity1=CTU&ACity1=HRB&SearchType=S&DDate1=2015-10-23&CK=C3271385E5643C1DA72B403923DE6181";
var _searchCount_c = 0;
var searchRouteIndex = "0";
ajaxRequest(url + '&rk=' + Math.random()*10+'164723','0.47247288855148021767518');

ajaxRequest方法格式化后如下

function ajaxRequest(n, t) {
var i = null,
e, f, h, r, s, u, o;
if (typeof XMLHttpRequest != "undefined") i = new XMLHttpRequest;
else if (typeof ActiveXObject != "undefined") {
if (typeof arguments.callee.aciveXString != "string") for (e = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], f = 0, h = e.length; f < h; f++) try {
i = new ActiveXObject(e[f]);
arguments.callee.activeXString = e[f];
break
} catch(c) {}
i == null && (i = new ActiveXObject(arguments.callee.activeXString))
}
i.onreadystatechange = function() {
try {
if (i.readyState == 4)
if (i.status >= 200 && i.status < 300 || i.status == 304) {
var r = eval("(" + i.responseText + ")");
if (_searchCount_c == 0 && r && r.Error && r.Error.Code == 104 && (r.Error.Message == "" || !r.Error.Message)) {
_searchCount_c++;
setTimeout(function() {
var i = n.split("&");
i.pop();
ajaxRequest(i.join("&") + "&rt=" + Math.random() * 1e3, t)
},
1e3);
return
}
jsonCallback.done(r)
} else i.status != 0 && jsonCallback.onError()
} catch(u) {
jsonCallback.onError()
}
};
r = n.replace(/^[\s\xA0]+|[\s\xA0]+$/g, ""); (r.indexOf("ClassType=CF") == -1 || r.indexOf("ClassType=&") != -1) && (r += getStorage("FD_SearchPage_onlyCf") == "CF" ? "&ClassType=CF": "");
_searchCount_c > 0 && (s = t.split(".")[1], t = "0." + s.substring(1, s.length - 1));
u = r.split("&");
o = r.indexOf("rk=") >= 0 || r.indexOf("rt=") >= 0 ? u.splice(u.length - 2, 1)[0] : u.pop();
u.push("CK=");
o = o.split("=")[1];
var fn = (function(u, r, k, t) {
var f38 = 1,
g38f = 1;
f38 = f38 -= parseInt(Math.sin(2) * 0xa);
if (f38 < 0) f38 = -f38;
while (f38 > 30) f38 = f38 % 10;
g38f = g38f *= parseInt(Math.exp(4) * 0xa);
g38f = g38f += parseInt(Math.cos(4) * 0xa);
g38f = g38f *= parseInt(Math.tan(4) * 0xa);
if (g38f < 0) g38f = -g38f;
while (g38f > 30) g38f = g38f % 10; (function(r, u, x, y, t, k) {
if (!window.location.href) {
return;
}
var l = r.split('');
var c = l.splice(y, 1);
l.splice(x, 0, c);
t.open('GET', u.join('&') + l.join('') + '&r=' + k, !0);
t.send(null);
})(r, u, f38, g38f, t, k)
});
fn(u, o, t, i)
}
var jsonCallback = {
isError: !1,
isReady: !1,
data: {},
readyList: [],
errorList: [],
ready: function(n) {
this.isReady == !1 ? this.readyList.push(n) : n(this.data)
},
done: function(n) {
this.isReady = !0;
this.data = n;
for (var t = 0; this.readyList[t];) this.readyList[t](n),
t++
},
error: function(n) {
this.isError == !1 ? this.errorList.push(n) : n()
},
onError: function() {
this.isError = !0;
for (var n = 0; this.errorList[n];) this.errorList[n](),
n++
}
},
getStorage = function(n) {
var i, r, t;
try {
if (i = "{}", window.localStorage) i = localStorage.getItem("jStorage");
else if (window.globalStorage) i = window.globalStorage[window.location.hostname];
else {
r = document.head || document.getElementsByTagName("head")[0];
t = document.createElement("link");
t.style.behavior = "url(#default#userData)";
r.appendChild(t);
try {
t.load("jStorage")
} catch(u) {
t.setAttribute("jStorage", "{}");
t.save("jStorage");
t.load("jStorage")
}
i = t.getAttribute("jStorage") || "{}";
r.removeChild(t)
}
return ! i || i == "{}" ? "": eval("(" + i + ")")[n]
} catch(f) {
return ""
}
}

这是经过方法处理后ajax请求的参数列表
rk:7.348407234530896170124
CK:16B12AD80EB8C9BD634A8F79F893924D
r:0.01197174881874956440312
我没有分析出来这些参数是怎么生成的
求大神赐教,分到用时方恨少,我只有这些分了 请笑纳
...全文
152 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
cheery_an 2015-10-23
  • 打赏
  • 举报
回复
不能帮你,但是也很感兴趣

87,779

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧