Chinaunix首页 | 论坛 | 博客
  • 博客访问: 601119
  • 博文数量: 129
  • 博客积分: 8026
  • 博客等级: 中将
  • 技术积分: 1300
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-21 14:39
文章分类

全部博文(129)

文章存档

2011年(1)

2007年(26)

2006年(102)

我的朋友

分类:

2006-08-29 23:01:13

一般来说,做小偷类的程序,只需要一个file_get_contents把内容取回来,再根椐规则使用正则去提取需要的内容即可.但碰到需要登陆后才能查看的内容,file_get_contents就无能为力了,庆幸的是有CURL函数库,获取需登陆的内容也不是难事,前提是你要有一个合法的帐号密码,可以正常登陆(开启curl支持的方法请参考php手册)

登陆一般有两种方式记录登陆状态,COOIE和SESSION,其实了解session原理的人都知道,session一般都是依靠cookie来传递的,所以,实现方式也一样,下面是实现步骤:

首先,建立一个文件,模拟被获取内容
content.php

if(!$_COOKIE['user']){
    if(
$_POST){
        
setcookie('user','tim');
        
header('Location:content.php');
    }else{
        echo 
"
type='submit'>"
;
    }
}else{ 
//登陆后内容
    
echo '我已经登陆了';
}
?>
呵,够简陋的,假设你把content.php放在网站的根目录,可以通过访问,我们现在的目的是从另一个页获得这个页面的内容

 
//试试直接获取
echo file_get_contents('');
?>
得到的结果肯定是没有登陆,只显示登陆表单

现在使用curl传递cookie

 
$ch curl_init();

curl_setopt($chCURLOPT_URL"");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); //如果希望获得内容但不输出,使用该参数,并设为非0值
curl_setopt($ch,CURLOPT_COOKIE,'user=tim'); //设置一个名为user值为tim的cookie
$re curl_exec($ch);

curl_close($ch);
echo 
$re;
?>
成功了吧?至于如何获得一个网站设置的cookie名称,各有各的方法,本人习惯用httpwatch

下面试试session方式的:

首先将要获得内容的页面(content.php)改成这个样子:

 
session_start();
if(!
$_SESSION['user']){
    if(
$_POST){
        
$_SESSION['user'] = 'tim';
        
header('Location:content.php');
    }else{
        echo 
"";
    }
}else{ 
//登陆后内容
    
echo '我已经登陆了';
}
?>
打开httpwatch,访问一下content.php并登陆,看到session使用的cookie了吗?这个就是传递session所用到的cookie了,把它设在get.php中即可,类似:

 
curl_setopt($ch,CURLOPT_COOKIE,'PHPSESSID=b80fdc24abdac655f66f9a27a1784c8f');
?>
以上只是实现的原理和一般测试方法,有兴趣的可以试试!

阅读(4410) | 评论(0) | 转发(0) |
0

上一篇:session的生存期

下一篇:变量命名规则

给主人留下些什么吧!~~