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;
}
}直接输入正确的用户名,密码,在跳转之前输出能得到登陆成功的信息,但是调用自定义跳转的方法时,每次都返回到登陆页面,无法进入课程中心,这是老师给提供的代码,是不是少设置什么信息了
还没有人回答问题,可以看看其他问题
PHP中的数据传输神器cURL
34292 学习 · 228 问题
相似问题