不可能给你写代码的
js的部分很简单,最重要的div+css布局!
比如电脑,办公.onclick=function(){
div1.style.display:block
}
刚刚去测试了一下,利用ajax的jsonp(跨域)的时候卡在了一个异常上:Uncaught SyntaxError: Unexpected token :。
这个异常是jd在对于ajax的跨域请求时没有对callback进行处理。所以无法让js获取到正确的json数据。
解决方案(php为例):用curl进行获取,也就是用后端做一次转发操作。jd官方也提供php的SDK。以下是我的jq的ajax代码 仅供参考。
$.ajax({url:'https://way.jd.com/showapi/address',
data: {
area:'鹿城',
areaid:'101210710',
needMoreDay:'0',
needIndex:'0',
needAlarm:'0',
need3HourForcast:'0',
appkey:'你申请的appkey',
ajax:1
},
type: "GET",
async:false,
dataType : "jsonp",
jsonp:'callback',
jsonpCallback:"jdwx",//jd返回json未对这个做处理导致js无法获取json
success: function (json) {
console.log(json)
},
error: function (msg) {
console.log(msg)
},
timeout:3000
})
老规矩先用错误信息登陆一下抓一下包,看看有那些post字段:
大概我们就知道我们要分析的字段有nloginpwd其余字段还不清楚,就在上下在看看其他数据包,根据pubkey我们猜测加密方式大概是RSA,继续查看其他数据包,找到一个有价值的get包
信息是:
没有发现明确的关键字,但是可以猜想bg、challenge、patch应该和我们的加密参数相关,但是不确定,只有继续分析加密的js片段:
其中好几个字段都是$("#??")格式,这种表示是来自页面的,那在看看网页源码
果然发现了很多有价值的东西在post表单中的,其中只有两个参数是需要单独获取的,其余都是从html源码里面解析出来的
authcode来源
是获取的源码中的一个值,再看源码
看样子是在验证码操作的时候触发的一个请求,返回的authcode的值,查看authcode请求的数据包
这个请求看起来不是那么友好,有好几个疑似加密字段,这个参数暂时放放,继续分析我们的passWord的加密。
继续深入getEntryptPwd($('#nloginpwd').val()),查看源码
核心的就两行
encrypt.setPublicKey(pubKey)return encrypt.encrypt(pwd)这必定是RSA加密无疑了,继续查看源码,单独的一个源码文件,一共3300多行,删减版如下
JSEncrypt是前端使用的实现RSA加密的库,看样子应该比较标准,那就试试能不能改写了,复制全部源码到node.js,会提示navigator、window未定义,这个问题很简单,在文件头定义
var navigator = this
var window = this
然后在文件尾部写个调用程序试试
是可以成功返回RSA加密结果的
京东的post请求不是太难,参数也能在源码中找到,但是他的难度在发出post请求之前的一个get请求,这个get请求和验证有关,和用户名相关,简单看了一下感觉有点复杂,留在第二篇讲获取authcode参数的其他参数是怎么来的。
ID:Python之战
|作|者|公(zhong)号:python之战
专注Python,专注于网络爬虫、RPA的学习-践行-总结
喜欢研究和分享技术瓶颈,欢迎关注
独学而无友,则孤陋而寡闻!