【大哥们,走波关注。万分感谢!!!】
事情缘由:
在工作中有一个导入别的网站数据需求,那我还能傻乎乎的ctrl+c,ctrl+v ???? 所以直接累一下大脑干脆爬取下数据算了,打算做一个自动化搬数据程序。因本人不会py(据说有很多爬虫api非常方便),项目是php所以也不能使用流行的go或者java。经查看网站发现对方采用了sign防爬,所以经过js一番逆向拿到了js版的加密算法(此处过程就省略了,过程复杂。)
问题出现:
拿到了js算法,本想转php版本发现了一个很坑的事情,例如:js无符号右位移(>>>)。what???PHP并没有这个位运算符,只有变相解决办法,这只是其一,所以导致如果改成php版本会很浪费时间去改动代码。
解决方案:
v8js,它是php扩展。liunx比较好安装,自行查阅资料。window环境吧我这可以放出一个自带好v8js版本的php环境,链接如下:
链接:aHR0cHM6Ly9wYW4uYmFpZHUuY29tL3MvMXFZQ1o0ZjZnRC1RU3BTTl95VUVFUlE=
提取码:M2J6eQ==
代码示例:
//封装号的加密函数(示例)
function getCode($str){
//v8js库
$v8 = new V8Js();
//js脚本代码
$func = <<< EOT
function character(str){
//js的加密算法
return str
}
character(PHP.str);//最后一行js执行函数的返回值就是下方$code获取到的值
EOT;
//传递参数给js
$v8->str = $str;
//执行js
$code = $v8->executeString($func);
//清空对象,垃圾回收。
unset($v8);
return $code;
}
注意事项:发现了一些bug,比如有些时候粘贴进入js代码执行会报【xx变量没找到,xx方法没找大】,原因可能是js中变量名和某函数名重名 ,导致js正常执行没问题但是在这里执行会报错,所以最好规范一下自己的代码哦!