当我们使用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即可。(安装方法自行百度)
在项目中需要对图片进行裁剪,前端裁剪完成发送base64给后端,但是很意外的PHP获取到的数据和前端有点差距,之前我都是先加密,后端解密,但是这次依然不行。于是使用filter_input方法轻松解决。$base64 = filter_input(INPUT_POST...
开发com组件可以用c++,vc++,net,我比较熟悉net,演示用dnet(1).创建项目:启动vs2017,新建项目,选择Visual C# ->Windows桌面->类库通用windows(2). 修改Com项目:点击 项目->项目属性,再点击应用程序->程序集信息,...
elasticsearch的操作都是基于http协议的,已经有现成的php类库,composer安装即可。{ "require": { &...
pear config-set http_proxy 47.94.200.124:3128 pecl config-set http_proxy 60.216.101.46:32868家里的长城宽带什么都上不去,安装php扩展真麻烦,使用网...
场景:模拟验证码发送。仅做代码演示。(1).创建一个验证码发送接口sendCaptcha/** * 发送验证码 */ public function sendCaptcha() { //外部参数(获...
适用于虚拟主机无法设置public目录为网站目录的虚拟主机(1).根目录创建index.php<?php //设置网站目录 $root_path = __DIR__ . DIRECTORY_SEPARATOR . 'publ...