php curl 模拟登录目标网站,登录后没能跟随302跳转,curl获取cookiee已经获得.代码如下. 困扰很久,希望高手不吝赐教

php curl 模拟登录百度首页解决方案
&来源:读书人网&【读书人网():综合教育门户网站】
php curl 模拟登录百度首页代码如下:PHP code?php$url
/?login&tplmn//
php curl 模拟登录百度首页代码如下:PHP code&?php$url = &/?login&tpl=mn&;//$url = &/&;$cookdir = &d:/www/html/mndl/cookie.txt&;$ch = curl_init();curl_setopt ($ch, CURLOPT_URL, $url);curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE); //这句是必须有的
设定为不验证证书 下面是不验证host。curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookdir); //保存cookies 发送用户浏览器信息 发送访问来源curl_setopt ($ch, CURLOPT_USERAGENT, &Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&);curl_setopt ($ch, CURLOPT_REFERER, &/&);$contents = curl_exec($ch);curl_close($ch);/* 原始表单样式
&input type=&hidden& name=&tpl_ok& value=&&&
&input type=&hidden& name=&next_target& value=&&&
&input type=&hidden& name=&tpl& value=&mn&&
&input type=&hidden& name=&skip_ok& value=&&&
&input type=&hidden& name=&aid& value=&&&
&input type=&hidden& name=&need_pay& value=&&&
&input type=&hidden& name=&need_coin& value=&&&
&input type=&hidden& name=&pay_method& value=&&&
&input type=&hidden& id=&u& name=&u& value=&/&&
&input type=&hidden& name=&return_method& value=&get&&
&input type=&hidden& name=&more_param& value=&&&
&input type=&hidden& name=&return_type& value=&&&
&input type=&hidden& name=&psp_tt& value=&0&&
&input type=&hidden& id=&password& name=&password& value=&&&
&input type=&hidden& name=&safeflg& id=&safeflg& value=&&&
&input type=&hidden& name=&isphone& value=&tpl&&*/$post_fields = array();$post_fields = preg_data($contents,'aid',$post_fields);$post_fields = preg_data($contents,'isphone',$post_fields);$post_fields['mem_pass'] = 'on'; //post 数据数组
记住我的登录状态$post_fields = preg_data($contents,'more_param',$post_fields);$post_fields = preg_data($contents,'need_coin',$post_fields);$post_fields = preg_data($contents,'need_pay',$post_fields);$post_fields = preg_data($contents,'next_target',$post_fields);$post_fields['password'] = 'password'; //post 数据数组
记住我的登录状态$post_fields = preg_data($contents,'pay_method',$post_fields);$post_fields = preg_data($contents,'psp_tt',$post_fields);$post_fields = preg_data($contents,'return_method',$post_fields);$post_fields = preg_data($contents,'return_type',$post_fields);$post_fields = preg_data2($contents,'safeflg',$post_fields);$post_fields = preg_data($contents,'skip_ok',$post_fields);$post_fields = preg_data($contents,'tpl',$post_fields);$post_fields = preg_data($contents,'tpl_ok',$post_fields);$post_fields['u'] = '/';$post_fields['username'] = 'username'; //post 数据数组
记住我的登录状态$post_fields['verifycode'] = '';$ch = curl_init();curl_setopt ($ch, CURLOPT_URL, $url);curl_setopt ($ch, CURLOPT_HEADER, 0);curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt ($ch, CURLOPT_POST, 1);curl_setopt ($ch, CURLOPT_POSTFIELDS, $post_fields);curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookdir);curl_setopt ($ch, CURLOPT_USERAGENT, &Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&);curl_setopt ($ch, CURLOPT_REFERER, &/?login&tpl=mn&);curl_exec($ch);curl_close($ch);$url = &/&;$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookdir);curl_setopt ($ch, CURLOPT_USERAGENT, &Mozilla/4.0 ( MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)&);curl_setopt ($ch, CURLOPT_REFERER, &/n&);$contents = curl_exec($ch);print_r($contents);curl_close($ch);function preg_data($source,$chr,$array){
preg_match('/&input\s*type=&hidden&\s*name=&'.$chr.'&\s*value=&(.*?)&&/i', $source, $matches);
if(!empty($matches)) {
$a = $matches[1];
die('Not found the '.$chr.'.');
$array[$chr]=$a;
return $}function preg_data2($source,$chr,$array){
preg_match('/&input\s*type=&hidden&\s*name=&'.$chr.'&\s*id=&'.$chr.'&\s*value=&(.*?)&&/i', $source, $matches);
if(!empty($matches)) {
$a = $matches[1];
die('Not found the '.$chr.'.');
$array[$chr]=$a;
return $}?&
现在是无法访问到登录后的页面 高手指教[解决办法]CURLOPT_FOLLOWLOCATION设置这个参数为TRUE试试看页面导航:
→ 正文内容 HP CURL获取cookies
PHP CURL获取cookies模拟登录的方法
利用PHP的curl函数实现模拟登录的方法。
要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了。利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302 跳转,而且是连续几十个302跳转,根本抓不了数据。因此,在发送搜索命令时,需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。这其实和论坛的模拟登录一个道理,先POST登录,获取cookies并保存,然后利用这个cookies访问就可以了。PHP 代码如下: 代码如下:&?phpheader('Content-Type: text/ charset=utf-8');$cookie_file = dirname(__FILE__).'/cookie.txt';//$cookie_file = tempnam("tmp","cookie");//先获取cookies并保存$url = ".hk";$ch = curl_init($url); //初始化curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出curl_setopt($ch, CURLOPT_COOKIEJAR,& $cookie_file); //存储cookiescurl_exec($ch);curl_close($ch);//使用上面保存的cookies再次访问$url = ".hk/search?oe=utf8&ie=utf8&source=uds&hl=zh-CN&q=qq";$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //使用上面获取的cookies$response = curl_exec($ch);curl_close($ch);echo $?&
您可能感兴趣的文章:
上一篇:下一篇:
最 近 更 新
热 点 排 行
12345678910| 时间: 20:54 | 分类:
使用PHP的curl函数,可以模拟登录各种类型的网站后台,例如Discuz、QQ邮箱、WordPress、DeDeCMS等等。模拟登录需要两个步骤,第一个是了解目标网站后台登录时所需要提交的数据字段,第二个才是用curl函数模拟向网站后台提交数据。那么这篇文章先通过讲解使用Chrome浏览器进行网络抓包,获取目标网站后台登录时所需要的数据。下一篇文章才是PHP模拟登录演示。
1 以本地登录WordPress后台为例
在本地搭建一个wordpress博客程序,那么默认的后台登录地址就类似于:。于是,先打开Chrome浏览器,然后按下F12键打开“审查元素”的界面,接着点击“Network”选项。可以看到这时没发生任何网络信息交互,抓包为空。
2 访问wordpress后台
在浏览器地址栏中输入,然后Chrome浏览器会自动进行抓包得到如下图所示数据。这时可以看到浏览器地址栏已经变成了:。那么下面这张图就描述了变化的详细过程。图中请求方式“Method”都是“Get”,当然还得知道图中的HTTP状态码“Status”值的含义是什么(1xx:临时响应;2xx表示响应成功;3xx:已重定向;4xx:请求错误;5xx:服务器错误)。
3 点击“Name”选项下抓取的wp-admin的内容
先点击“wp-admin”,显示如下图所抓包的数据。Request Headers是我们发送的请求报文头,Response Headers是WordPress后台响应的头部信息。之前输入的代表发送的请求URL,得到的HTTP响应码是301(永久跳转),于是后台响应跳转到(即图中Response Headers下的“Location”)。
4 点击“Name”选项下抓取的wp-admin/的内容
先点击“wp-admin/”,显示如下图所抓包的数据。这时,变成了发送的请求URL,得到的HTTP响应码是302(临时跳转),于是后台响应跳转到(即图中Response Headers下的“Location”)。
5 点击“Name”选项下抓取的wp-login.php?redirect_to=h的内容
先点击“wp-admin/”下面的“wp-login.php?redirect_to=h……”,显示如下图所抓包的数据。这时,变成了发送的请求URL。这时图中Response Headers下没有“Location”,即不会再跳转到其它地址。出现了Set-Cookie,即服务器在在浏览器中生成了以wordpress_为前缀的cookie。
6 输入帐号和密码登录wordpress后台
在输入帐号和密码后,Chrome抓包如下图所示。
然后点击“wp-login.php”的抓包数据。可以看到请求URL是,但是请求方式“Method”变成了“POST”。“Referer”是之前步骤5中地址栏中的地址。Request Headers请求包中可以看到刚才输入的帐号(log)对应的值:vfhky;密码(pwd)对应的明文是刚才输入的密码;wp-submit对应的值“登录”;“redirect_to”表示发送上面数据的目标地址。而对应的Response Headers中的“Location”也跳转到“redirect_to”对应的地址。同时通过Set-Cookie也生成了四个cookie。
7 点击“Name”选项下抓取的wp-admin/的内容
先点击“wp-admin/”,显示如下图所抓包的数据。图中Request Headers信息中,发送了第6个步骤生成了4个cookie。这时图中Response Headers下也没有“Location”,即不会再跳转到其它地址。因此,此时浏览器中的地址应该是:。
8 Chrome抓包总结
通过wordpress后台登录,我们用chrome实现网络抓包,完整的知道了后台登录的整个流程。当然,对于其它后台网站的登录,抓包过程也是一样的。在中,就直接通过PHP程序模拟wordpress后台登录。
Leave a comment &
Categories
(77) (19) (1) (6) (7) (11) (45)
Recent Articles
Recent Comments
[PS笔刷吧]
[小清新头像吧]
[爆破测试仪]
[whisperer]您现在的位置: >
PHP CURL获取cookies模拟登录的方法
联盟电脑要提取google搜索的部分数据,发现google对于软件抓取它的数据屏蔽的厉害,以前伪造下 USER-AGENT 就可以抓数据,但是现在却不行了。利用抓包数据发现,Google 判断了 cookies,当你没有cookies的时候,直接返回 302 跳转,而且是连续几十个302跳转,根本抓不了数据。因此,在发送搜索命令时,需要先提取 cookies 并保存,然后利用保存下来的这个cookies再次发送搜索命令即可正常抓数据了。这其实和论坛的模拟登录一个道理,先POST登录,获取cookies并保存,然后利用这个cookies访问就可以了。PHP 代码如下: 代码如下:?phpheader('Content-Type: text/ charset=utf-8');$cookie_file = dirname(__FILE__).'/cookie.txt';//$cookie_file = tempnam("tmp","cookie");//先获取cookies并保存$url = ".hk";$ch = curl_init($url); //初始化curl_setopt($ch, CURLOPT_HEADER, 0); //不返回header部分curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //返回字符串,而非直接输出curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file); //存储cookiescurl_exec($ch);curl_close($ch);//使用上面保存的cookies再次访问$url = ".hk/search?oe=utf8$ch = curl_init($url);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file); //使用上面获取的cookies$response = curl_exec($ch);curl_close($ch);echo $?
(责任编辑:联盟电脑)
更多相关资讯
【联盟电脑】部分内容自于互联网,其言论不代表本站观点,若本站侵犯到您的版权,请与站长联系,我们将在第一时间核实并删除!
版权所有 & 【联盟电脑】 | 专注分享有价值、实用的电脑技术和知识
Copyright &
All rights reserved. 京ICP备号当前访客身份:游客 [
当前位置:
要模拟登录https的网站,已经拿到cookie,却没登录成功.请大神帮帮忙,困扰太久 ..
error_reporting(0);
= 'cckk263';
//邮箱密码
= '/zh/auth_login/';
= curl_init($url);
//创建一个用于存放cookie信息的临时文件
$cookie= dirname(__FILE__).'/tmp/cookie.txt';
$fields_post = array(
'Login'=& $user,
'Password'=& $pass,
'RedirectAfterLoginUrl'=&'/zh',
'RememberMe'=&false,
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
// 自动设置Referer
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, count($fields));
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields_post));
$result= curl_exec($ch);
curl_close($ch);
$lines = file($cookie);
$trows = '';
foreach($lines as $line) {
if($line[0] == '#' && substr_count($line, "\t") == 6) {
$tokens = explode("\t", $line);
var_dump($result);
$url='/auth_set?auth='.$tokens[6].'&returnUrl=https%3a%2f%%2fzh';
$ch = curl_init($url);
$headers = array( 'User-Agent'
=& 'Mozilla/5.0 (W U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/ Firefox/3.0'
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
//将之前保存的cookie信息,一起发送到服务器端
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
$result = curl_exec($ch);
curl_close($ch);
//目标地址
$url='/zh/signals/62134';
$ch = curl_init($url);
$headers = array(
'User-Agent'
=& 'Mozilla/5.0 (W U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/ Firefox/3.0'
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 120);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
//file_put_contents('./ok/result.txt', $result);
//unlink($cookie);
//开始抓取内容
preg_match_all('/&td class="Ibx_Td_addrName"&&a[^&]*&(.*?)&\/a&&\/td&&td class="Ibx_Td_addrEmail"&&a[^&]*&(.*?)&\/a&&\/td&/i', $result,$infos,PREG_SET_ORDER);
//1:姓名2:邮箱
print_r($infos);
共有0个答案
有什么技术问题吗?
名前的其他问题
类似的话题

我要回帖

更多关于 curl带cookie 的文章

 

随机推荐