自定义跳转实现问题

来源:-

fation

2014-12-08 15:44

//自定义跳转方式
$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;
    }
}

直接输入正确的用户名,密码,在跳转之前输出能得到登陆成功的信息,但是调用自定义跳转的方法时,每次都返回到登陆页面,无法进入课程中心,这是老师给提供的代码,是不是少设置什么信息了

写回答 关注

0回答

还没有人回答问题,可以看看其他问题

PHP中的数据传输神器cURL

cURL就是这样的利器,可以帮助大家操作各种网络资源

34277 学习 · 218 问题

查看课程

相似问题