最近多站点模块出现了新的问题。问题不是出在模块本身。而是浏览器限制了。现在的浏览器出于安全考虑,不让HTTPS网站访问HTTP的网站资源。所以没有办法啊,大环境是这样。只能想想其它办法了。总要解决这个问题,要不能谁买多站点模块呢。
解决思路是:管理站远程抓取被管理站页面,通过模拟登录,抓取到被管理站的后台页面源代码。
抓取源代码的话那就要用到CURL,并且要饶过验证码,获取cookies并提交来采集代码。
操作代码如下:
$url = '登录地址'; $ip = getip(); //模拟IP地址 $post = array ( 'username' => '用户名', 'password' => '密码', ); //需要提交的表单数据 $refer = 'http://www.xxx.com/admin/index/init.html'; //模拟来源地址 $header = array( 'Host:www.xxx.cn', 'Referer:'.$refer, 'X-Forwarded-For:'.$ip, 'Client-Ip:'.$ip, 'Upgrade-Insecure-Requests:1', 'User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36', ); $cookie = 'cookies的地址'; //-------上面是条件----------下面是两种调用方法------------ //POST 提交方法 $res = curl_post($url, $cookie, $post, $refer, $header,1); //GET 提交方法 $res = curl_post($url, $cookie, $post, $refer, $header);
curl函数封装:
private function curl_post($url, $cookie, $post = array(), $refer = '', $header = array(), $fx = 0) { $curl = curl_init();//初始化curl模块 curl_setopt($curl, CURLOPT_URL, $url);//登录提交的地址 $refer && curl_setopt($curl, CURLOPT_REFERER, $refer); count($header) && curl_setopt($curl, CURLOPT_HTTPHEADER, $header);//模拟头信息 curl_setopt($curl, CURLOPT_HEADER, 0);//是否显示头信息 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//是否自动显示返回的信息 curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie); //读取cookie if(!$fx){ curl_setopt($curl, CURLOPT_POST, 0);//get方式提交 }else{ curl_setopt($curl, CURLOPT_POST, 1);//post方式提交 } count($post) && curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));//要提交的信息 curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie); //设置Cookie信息保存在指定的文件中 $rs = curl_exec($curl);//执行cURL curl_close($curl);//关闭cURL资源,并且释放系统资源 return $rs; }
好了,就写到这里,路还很长。实现功能还要很久啊。