模拟登录
设想:
利用curl请求调用登录页面的url为:xxxx/login.php
再次利用curl请求调用登录后的页面,url为:xxx/myadmin.php
抓取第二次返回的结果中是否有指定的关键字,如:“退出登录”
如果有的话认为模拟登录成功,否则的话认为失败
问题:
实现的过程中 因为login.php将cookie种到了浏览器中,而监控程序跑的时候并没有在浏览器中跑,而是以脚本的形式跑的,所以种cookie的时候没有中上,导致调取第二个页面的时候因并未读取到cookie导致返回的始终是登录页面并非登录成功后的页面
解决方法:
在用curl调用第一个方法时,指定其种cookie的位置为服务器路径下的某一个文本中,在第二次调用curl的时候将cookie的位置传过去,这样在第二个页面读cookie的时候就能读取到cookie了,进而能成功模拟登录
实现代码:
$loginUser = xxx;
$loginPass = xxx;
//模拟用户登录
$postData = array(
'login'=> $loginUser,
'passwd'=> $loginPass
);
ob_start();//开启输出缓冲
$checkLoginURL = "xxx/login.php";
$cookieFile = dirname(__FILE__) . '/cookie.txt';
//Request::loginPost($checkLoginURL, $cookieFile, $postData);
$curl = curl_init(); //初始化curl模块
curl_setopt($curl, CURLOPT_URL, $checkLoginURL); //登录提交的地址
curl_setopt($curl, CURLOPT_HEADER, 0); //是否显示头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //是否自动显示返回的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1); //post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postData)); //要提交的信息
curl_exec($curl); //执行cURL
curl_close($curl); //关闭cURL资源,并且释放系统资源
$myadminURL = "xxx/myadmin.php";
//$resultHTML = Request::getContent($myadminURL, $cookieFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $myadminURL);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); //读取指定位置的cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
@unlink($cookieFile);
ob_end_clean();
if(strpos($rs,'退出登录') !== false){
//todo
}
设想:
利用curl请求调用登录页面的url为:xxxx/login.php
再次利用curl请求调用登录后的页面,url为:xxx/myadmin.php
抓取第二次返回的结果中是否有指定的关键字,如:“退出登录”
如果有的话认为模拟登录成功,否则的话认为失败
问题:
实现的过程中 因为login.php将cookie种到了浏览器中,而监控程序跑的时候并没有在浏览器中跑,而是以脚本的形式跑的,所以种cookie的时候没有中上,导致调取第二个页面的时候因并未读取到cookie导致返回的始终是登录页面并非登录成功后的页面
解决方法:
在用curl调用第一个方法时,指定其种cookie的位置为服务器路径下的某一个文本中,在第二次调用curl的时候将cookie的位置传过去,这样在第二个页面读cookie的时候就能读取到cookie了,进而能成功模拟登录
实现代码:
$loginUser = xxx;
$loginPass = xxx;
//模拟用户登录
$postData = array(
'login'=> $loginUser,
'passwd'=> $loginPass
);
ob_start();//开启输出缓冲
$checkLoginURL = "xxx/login.php";
$cookieFile = dirname(__FILE__) . '/cookie.txt';
//Request::loginPost($checkLoginURL, $cookieFile, $postData);
$curl = curl_init(); //初始化curl模块
curl_setopt($curl, CURLOPT_URL, $checkLoginURL); //登录提交的地址
curl_setopt($curl, CURLOPT_HEADER, 0); //是否显示头信息
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 0); //是否自动显示返回的信息
curl_setopt($curl, CURLOPT_COOKIEJAR, $cookieFile); //设置Cookie信息保存在指定的文件中
curl_setopt($curl, CURLOPT_POST, 1); //post方式提交
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postData)); //要提交的信息
curl_exec($curl); //执行cURL
curl_close($curl); //关闭cURL资源,并且释放系统资源
$myadminURL = "xxx/myadmin.php";
//$resultHTML = Request::getContent($myadminURL, $cookieFile);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $myadminURL);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookieFile); //读取指定位置的cookie
$rs = curl_exec($ch); //执行cURL抓取页面内容
curl_close($ch);
@unlink($cookieFile);
ob_end_clean();
if(strpos($rs,'退出登录') !== false){
//todo
}