喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
 18  1/2  1  2  > 
     
标题: [原创] 使用curl获取需要登陆验证的内容  
 
太阳雨
高级会员
Rank: 4
船长



UID 29985
精华 0
积分 724
帖子 872
金钱 724 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2004-7-10
来自 广州
状态 离线
使用curl获取需要登陆验证的内容

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

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

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

<?php
if(!$_COOKIE['user']){
    if(
$_POST){
        
setcookie('user','tim');
        
header('Location:content.php');
    }else{
        echo 
"<form action='content.php' method='post'><input type='text' name='user' value='输入用户名登陆'><input 

type='submit'></form>"
;
    }
}else{ 
//登陆后内容
    
echo '我已经登陆了';
}
?>
呵,够简陋的,假设你把content.php放在网站的根目录,可以通过http://localhost/content.php访问,我们现在的目的是从另一个页获得这个页面的内容

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

现在使用curl传递cookie

<?php
$ch 
curl_init();

curl_setopt($chCURLOPT_URL"http://localhost/content.php");
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)改成这个样子:

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

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




PHPec开发框架(www.phpec.com)
2006-8-29 11:06 PM#1
查看资料  Blog  发短消息  QQ  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] sql效率问题
一直在用httpclient实现类似的功能



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-8-30 12:56 AM#2
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 大家所使用的PHP开发环境
呵呵,楼主看没看偶前面写的文章?

直接用fopen类的也可以.

http://www.phpx.com/happy/thread-121386-1-4.html





2006-8-30 10:12 AM#3
查看资料  访问主页  Blog  发短消息  顶部
 
太阳雨
高级会员
Rank: 4
船长



UID 29985
精华 0
积分 724
帖子 872
金钱 724 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2004-7-10
来自 广州
状态 离线
[推荐阅读] 借钱


QUOTE:
原帖由 fcicq 于 2006-8-30 10:12 AM 发表
呵呵,楼主看没看偶前面写的文章?

直接用fopen类的也可以.

http://www.phpx.com/happy/thread-121386-1-4.html
这是我昨晚用到,顺便写出来的...
实现的方法当然很多,但这篇文章的重点是获得需要登陆的内容,虽然也不是难实现的东西,但印象中问的人多,真正有实现方法的文章极少看到(起码我没看过),所以就随便写了下来...

楼上所提的文章,也没有说到需登陆的关键实现方法,至于获得远程流内容,方法有多种,我还是喜欢curl和pear的Net_Curl
qh663所提的httpclient也是不错的选择,值得推荐




PHPec开发框架(www.phpec.com)
2006-8-30 01:55 PM#4
查看资料  Blog  发短消息  QQ  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 深圳鼎诚网络急招PHPER

呵呵,确实如此...偶只想说方法多而已,无其它意思.





2006-8-30 02:19 PM#5
查看资料  访问主页  Blog  发短消息  顶部
 
php-user
新手上路
Rank: 1



UID 79250
精华 0
积分 24
帖子 14
金钱 24 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-8-29
状态 离线
[推荐阅读] 最近想买一个2手笔记本,哪个有意思 ,价钱2000左右的,不知道发这里合适吗
curl的用法手册很清楚了,还有个获取cookie保存的,自动提交保存的cookie,这样对方的cookie随时在变也不怕了,可以简单的做个机器人。

curl获取比file_get_contetns快,效率也高,手册上说的。老外有空做了对比。
2006-8-30 04:45 PM#6
查看资料  发短消息  顶部
 
fcicq
新手上路
Rank: 1
初级会员



UID 24467
精华 0
积分 21
帖子 587
金钱 20 喜悦币
威望 0
人脉 1
阅读权限 10
注册 2003-11-8
来自 fcicq.net
状态 离线
[推荐阅读] 什么是DOM
呵呵,好像是成倍的差距...
包括偶之类的都比较懒罢了.不愿意再去编译.





2006-8-30 05:46 PM#7
查看资料  访问主页  Blog  发短消息  顶部
 
路过
注册会员
Rank: 2
初级会员



UID 66167
精华 0
积分 114
帖子 115
金钱 114 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2005-8-24
来自 湖南
状态 离线
[推荐阅读] 请教一条SQL语句的写法
这不是原创吧,早发遍了, curl比其它还是方便多了
cookie或
存curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
送curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
2006-8-30 09:47 PM#8
查看资料  访问主页  发短消息  ICQ 状态  Yahoo!  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2501
帖子 4654
金钱 2498 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 去除JS文件注释空格等优化大小软件
收藏了
以后试试看
httpwatch是什么软件?
和firefox的live HTTP headers插件的效果一样吗?




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2006-9-5 09:09 AM#9
查看资料  Blog  发短消息  顶部
 
放弃思考
中级会员
Rank: 3Rank: 3
老会员



UID 31149
精华 0
积分 389
帖子 390
金钱 389 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-9-14
状态 离线
[推荐阅读] 西安诚聘中级PHP程序员
不错。谢谢分享



blog:  http://j.cublog.cn
2006-9-5 11:45 AM#10
查看资料  发短消息  顶部
 18  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.027415 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP