一次成功的snoopy模拟登录体验

snoopy 官网

snoopy是基于PHP的一个爬取网站数据类,使用方便 。以下是从底层理解写的一个模拟登陆案例:

	$URL = 'http://www.****.cn/login.html';   // 登陆链接
    $snoopy = new Snoopy;
    $snoopy->fetchform( $URL );    // 获取登陆页面的表单,并且headers返回了模拟登陆所需要的cookie
    $preg = '/name=\"(.*?)\".*?value=\"(.*?)\"/';
    preg_match_all($preg,$snoopy->results , $res );
    $formvars=[];
    foreach ($res[1] as $key => $val ){
        $formvars[$val] = $res[2][$key];
    }     // 把登陆所需要的参数提取出来(laravel可能有_token令牌)

   $formvars['email'] = '[email protected]';
   $formvars['password'] = '456';   // 加入账号密码
        
   $snoopy->_redirectaddr = "http://www.****.cn"; //重定向地址,不清楚有什么用;但是底
        	层这个值必须为true才会调用setcookies()函数,把headers的set-cookie值写入到cookies里面
   $snoopy->submit('http://www.****.cn/member/check',$formvars);//$formvars为提交的数组
   $snoopy->fetchlinks("http://www.****.cn/center/profile");  // 需要获取数据的页面
   dump($snoopy);exit;
        

jq22网站模拟登陆

	// 登陆获取到cookie
	$curl = curl_init();
    $cookie_jar = tempnam( '/tmp','cookie');   // 保存cookie的目录,频繁执行脚本系统会累积很多
    curl_setopt($curl, CURLOPT_URL,'http://www.jq22.com/emdl.aspx?em=用户&pw=密码');//登录的jq22
    curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_jar);// 把返回来的cookie信息保存在$cookie_jar文件中
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设定返回 的数据是否自动显示
    curl_setopt($curl, CURLOPT_HEADER, false);//设定是否显示头信 息
    curl_setopt($curl, CURLOPT_NOBODY, false);//设定是否输出页面 内容
    curl_exec($curl);//返回结果
    curl_close($curl); //关闭

   // 获取到cookie后,去爬取需要的页面
   $curl2 = curl_init();
   curl_setopt($curl2, CURLOPT_URL, 'http://www.jq22.com/myhome');//登陆后要从哪个页面获取信息
   curl_setopt($curl2, CURLOPT_HEADER, false);
   curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl2, CURLOPT_COOKIEFILE, $cookie_jar);
   $content = curl_exec($curl2); 
	
	// 打印页面
   dump($content);

你可能感兴趣的:(PHP)