当我们使用php爬虫采集网站时经常会遇到内容使用ajax异步加载。一般采取的方案是PHP模拟再请求api接口获取数据,但是有时候前端js加密非常麻烦,我们需要将js的加密方法转换为php方法方便curl请求。当然通过了解我们可以通过3种方案解决。
第一种:使用phpv8js扩展执行js代码。(pecl自行下载安装,windows安装方法http://www.yuzhiwei.com.cn/archives/238.html/comment-page-1)
<?php
//初始化
$v8 = new V8Js();
//js代码
$js = "
var char = 'abcdef';
var password = '123456';
function sign(char,password)
{
return char+password;
}
var token = sign(char,password);
token;
";
//尝试执行js
try
{
$ret = $v8->executeString($js, 'auth.js');
echo '执行成功:' . PHP_EOL;
var_dump($ret);
}
catch (Exception $e)
{
echo '代码异常' . PHP_EOL;
var_dump($e->getMessage());
}输出:abcdef123456
第二种:使用phantomjs加载网页,phantomjs软件内置一款webkit内核的浏览器,通过php的api调用完成真正的模拟访问,等待页面加载完成提取dom即可。(安装方法自行百度)
常见的PHP优化方法,让PHP效率更高,抽空更新(很多都是学习网络上的方法,想深度理解建议学C语言。):字符串的输出最好使用单引号,不要使用双银行,否则PHP会去找是否存在变量需要解析大数组,对象,资源句柄使用完及时进行unset()能用系统函数解决的问题尽量不要使用正则表达式,虽然正则表达式逼格高...
通过http推送消息给socket,socket服务再向客户端推送<?php /* * Socket推送 * 请用守护进程方式启动php msgservice.php & (socket只...
第一步:服务端文件<?php $wsdlfile='webservice.wsdl'; ini_set('soap.wsdl_cache_enabled','0'); //关闭WSDL缓存 //001...
应用场景:PHP模拟购买,商品数量大于0才能购买常见代码:<?php //连接数据库 $con=mysqli_connect("localhost","ihuohuo","927464cy","ihuohuo");...
<?php /** * @throws Exception */ function curl() { throw new \Exception('err...
有时候我们需要爬一个接口,但是这个接口需要很多参数,包括header和cookie要去编写,使用php curl模拟实在太慢。我们可以通过浏览器的network来复制请求为curl命令。例如我需要模拟请求接口地址:https://www.xkmz.cc/Ajax/Debug/delly,我们只需要在...