我当前有一个需求,需要采集一个漫画网站的列表页(带分页)、漫画详情页、章节页,并且在采集的时候携带Cookie,以达到采集会员章节的目的,再者,我需要自动跳转并适宜在定时任务下使用。第一步:引入simple_html_dom库为了能够达到像JavaScript一样操作HTML DOM,我们需要使用到simple_html_dom库,在GitHub下载后,引入simple_html_dom.php文件。由于我当前使用的框架为TP3,所以需要把simple_html_dom.php放置在/ThinkPHP/Library/Org/Util目录下,并修改名称为simple_html_dom.class.php(其他框架或者原生只需按照规范或自己的喜好引入到要使用的文件当中即可)接下来需要在使用的文档顶部(namespace下面)use Org\Util\simple_html_dom;此时,我们就可以在需要使用的方法里$dom = new simple_html_dom();第二步,获取页面dom首先我们需要获取HTML的文档数据该方法输入一个url地址,返回html文档数据// 获取页面H
Redis,与Memcached类似,是一个键值结构的非关系型数据库,基于内存运行,可持久化储存、集群负载均衡,常用于内容缓存、消息队列、临时计数以及日志储存场景。由于数据库性能的原因,一些频繁读取或需异步处理的数据我们需要通过Redis来实现,如商品秒杀、消息通知、网站信息设置缓存、操作日志及访问日志储存等,Redis基于内存且高速的模式可以大大减轻我们数据库的负担。一、前置ThinkPHP 5.1PHP 7.2.9Redis 3.0.504Nginx 1.15.11二、连接Redis2.1 设置密码在Redis目录下redis.conf文件里添加requirepass 你要设置的Redis密码2.2 添加Redis配置由于我们需要集中管理相关配置,所以需要在TP5 Config.php文件缓存设置里新增Redis配置 // +---------------------------------------------------------------------- // | 缓存设置 // +---------------------------------------------
API:https://api.sunweihu.com/api/sjtx/api.php参数:lx【1.男头:a1 2.女头:b1 3.动漫:c1 4.动漫女头:c2 5.动漫男头:c3】 public function getUserAvatar() { // 获取图片数据 $data = file_get_contents('https://api.sunweihu.com/api/sjtx/api.php?lx=c2'); // 获取图片信息 $info = getimagesizefromstring($data); ob_clean(); // 获取图片类型 $img_type = explode("/",$info['mime']); // 生成目录地址 $dir_local = $_SERVER['DOCUMENT_ROOT'] . '/' . 'images/' . 'avatar/' . date('Ymd'); // 生成图片名称 $img_local =
/** * https://api.sunweihu.com/api/qqxt/api.php接口可接受一个参数【qq】 * 传入随机参数可获取对应QQ用户的昵称,拿这些昵称就可以当作测试数据 **/ public function getUserName() { $nickname = null; while (!$nickname) { $http_result = httpGet('https://api.sunweihu.com/api/qqxt/api.php?qq='.mt_rand(1000000,2000000000)); $data = json_decode(str_replace(array("\r\n", "\r", "\n"), "", http_result )); if ($data->code == 1) { $nickname = $data->name;
// 图片地址 $img = '图片地址'; // 把文件转换成字符串 $data = file_get_contents($img); // 获取图片信息 $info = getimagesizefromstring($data); // 清空缓冲区所有数据 ob_clean(); // 输出图片数据流 echo $data; // 设置信息头 header("content-type:".$info['mime']); exit;
$onlineip = ''; if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $onlineip = getenv('HTTP_CLIENT_IP'); } elseif(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $onlineip = getenv('HTTP_X_FORWARDED_FOR'); } elseif(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $onlineip = getenv('REMOTE_ADDR'); } elseif(isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE
如果要加密数组请在加密前json_encode(数组)需要获取加密的数据时请在解密前json_decode(加密字符串)在别人不知道key和iv的情况下,让他解到地球爆炸都解不出来强烈建议加密密钥(key)与初始向量(iv)全部都使用随机数(指每个用户都有不同的key和iv),在泄露了一个用户的key和iv的时候让攻击者无法解密其他用户的数据,并且每隔一段时间更换用户key和iv的生成逻辑class Aes { /** * 加密方法,对数据进行加密,返回加密后的数据 * @param string $data 要加密的数据 * @return string */ public function encrypt($data) { return openssl_encrypt($data, 'AES-256-CBC', '此处填写key',0, '此处填写16位iv'); } /** * 解密方法,对数据进行解密,返回解密后的数据 * @param string $data
闲着无聊的时候搞了一个图像验证码,图片可自己上传或者让爬虫自己爬取图片[x]多状态返回[x]组件化[x]验证错误切换下一版[x]选项根据样本随机打散[x]自适应(需在组件调用时给出宽高,否则将顶宽顶高显示)[x]防爬题库[x]频繁冷却[-]根据服务器忙碌状态调整难度[-]色盲题库[-]客户端缓存这破GIF,录制的糟糕透顶
SK
Devil in My Mind.