//自定义跳转方式 $loginurl = 'http://www.imooc.com/user/login'; $spaceurl = 'http://www.imooc.com/space/index'; $param = 'username=yourusername&password=yourpass&remember=1'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $loginurl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //Cookie相关设置,这部分设置需要在所有会话开始之前设置 //使用Cookie时,必须先设置时区 date_default_timezone_set('PRC'); curl_setopt($ch, CURLOPT_COOKIESESSION, 1); // 注释掉这行,因为这个设置必须关闭安全模式 以及关闭open_basedir,对服务器安全不利 //curl_setopt($curlobj, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $param); curl_setopt($ch, CURLOPT_HTTPHEADER, array('applicaiton/x-www-form-urlencoded; charset=utf-8', 'Content-length: '.strlen($param) )); curl_exec($ch); //进入空间 curl_setopt($ch, CURLOPT_URL, $spaceurl); curl_setopt($ch, CURLOPT_POST, 0); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: text/xml")); $output = curl_redir_exec($ch); //执行 curl_close($ch); echo $output; //自定义实现页面链接跳转抓取 function curl_redir_exec($ch, $debug='') { static $curl_loops = 0; static $curl_max_loops = 20; if($curl_loops++ >= $curl_max_loops) { $curl_loops = 0; return false; } //开启header才能够抓取到重定向到新的新URL curl_setopt($ch, CURLOPT_HEADER, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $data = curl_exec($ch); //分割返回的内容 $h_len = curl_getinfo($ch, CURLINFO_HEADER_SIZE); $header = substr($data, 0, $h_len); $data = substr($data, $h_len-1); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); //echo $http_code."<br />"; if($http_code == 301 || $http_code == 302) { $matches = array(); preg_match('/Location:(.*?)\n/', $header, $matches); $url = @parse_url(trim(array_pop($matches))); //print_r($url);die; if(!$url) { $curl_loops = 0; return $data; } //最后一个有效的URL地址 $last_url = parse_url(curl_getinfo($ch, CURLINFO_EFFECTIVE_URL)); if(!isset($url['scheme'])) { $url['scheme'] = $last_url['scheme']; } if(!isset($url['host'])) { $url['host'] = $last_url['host']; } if(!isset($url['path'])) { $url['path'] = $last_url['path']; } $new_url = $url['scheme'].'://'.$url['host'].$url['path'].(isset($url['query']) ? '?'.$url['query'] : ''); curl_setopt($ch, CURLOPT_URL, $new_url); return curl_redir_exec($ch,$last_url); } else { $curl_loops = 0; return $data; } }
直接输入正确的用户名,密码,在跳转之前输出能得到登陆成功的信息,但是调用自定义跳转的方法时,每次都返回到登陆页面,无法进入课程中心,这是老师给提供的代码,是不是少设置什么信息了