php绝顶高手进,curl模拟成功登录后怎么继续操作post数据并获取跳转后的页面

ycpostjsjzx 2014-11-23 01:14:05
绝顶高手来解答,能模拟登录成功也能抓取到登录后看到的页面,就是不能抓取到登录成功后继续post操作后跳转后的页面
<?php
$cookie_jar_index = 'cookie.txt';
//模拟登录
$url = "http://xxxxxxxxxjsp/main.jsp";//地址就不发出来了
$params = "Username=xxxxxxx&svr_id=xxxxxxx&PassWord=xxxxxx&image.y=11&image.x=20";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar_index);
//curl_setopt($ch, CURLOPT_COOKIE, "fruit=apple; colour=red");
//上面代码是直接传递cookie信息,而非文件
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
//curl_setopt($ch, CURLOPT_NOBODY, 1);//这个不能打开,否则无法生成cookie文件
ob_start();
curl_exec($ch);
curl_close($ch);
ob_clean(); //登录成功以上内容
//模拟 登录成功后 继续 POST 数据 并抓取跳转的页面
$url = "xxxxxxxxxxx/jsp/realtimemonitor/choose_Dev_attribute_do.jsp";//登录成功 继续post数据的地址
$referer_url='http://xxxxxxxxxx/jsp/realtimemonitor/choose_Dev_attribute2.jsp';// 发送post数据页面的referer来路页面

$button=’‘';//这个值我用工具抓取的IE下的工具数据 居然是个 ”口“个符号,用火狐下的工具看到的是%C8%B7+%B6%A8
$ckj='1';
$cqkytj='2';
$qkj='0';
$data ='button='.urlencode($button).'&ckj='.urlencode($ckj).'&cqkytj='.urlencode($cqkytj).'&qkj='.urlencode($qkj);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url);
curl_setopt($ch2,CURLOPT_REFERER,$referer_url);
curl_setopt($ch2, CURLOPT_COOKIEJAR, $cookie_jar_index); // 这是 把cookie存入
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar_index); //这是 使用COOKIE
curl_setopt($ch2, CURLOPT_POST, 1);
curl_setopt($ch2, CURLOPT_POSTFIELDS, $data);

//curl_setopt($ch2,CURLOPT_FOLLOWLOCATION,1);
ob_start();
curl_exec($ch2);
curl_close($ch2);
$rs = ob_get_contents(); //$rs就是返回的内容
ob_clean();
//模拟 获取看到的页面
$url = "工具查看到的POST数据后 跳转的页面";
$referer_url='xxxxxxx/jsp/realtimemonitor/choose_Dev_attribute2.jsp'; //工具看到的跳转页面的referer地址

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url);
curl_setopt($ch2,CURLOPT_REFERER,$referer_url);
curl_setopt($ch2, CURLOPT_COOKIEFILE, $cookie_jar_index);
//下面这个跳转 打开后 ,连登录成功的第一个页面都不能显示 了所以我把它注释掉了,求高手解答
//curl_setopt($ch2,CURLOPT_FOLLOWLOCATION,1);
ob_start();
curl_exec($ch2);
curl_close($ch2);
$rs = ob_get_contents(); //$rs就是返回的内容
ob_clean();
print_r($rs);
print_r($data); //打印 内容总是 登录成功后 的页面, 但是继续post数据 跳转的页面始终不成功 求绝顶高手解答

?>
遇到一个问题,curl 模拟登录能成功抓取登录后的页面,但是我想要抓取的页面,需要继续POST数据后才能获得,并且post数据后cookie 会发生变化,页面也会有重定向,而且我用工具看浏览器POST的数据里面,有个button 值居然是个“口” 这么个符号,我就懵了火狐浏览器工具查看到的值是,请问这要怎么才能带着cookie 保持登录并继续post 数据然抓取跳转后的页面啊
...全文
1224 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ycpostjsjzx 2014-11-24
  • 打赏
  • 举报
回复
引用 2 楼 fdipzone 的回复:
参考:http://blog.csdn.net/fdipzone/article/details/8821957
我去看了下发现这东西,连个注释都没有 完全看不懂 ,我是菜鸟
ycpostjsjzx 2014-11-24
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
由于你隐去了 url,所以无法给出细节的指导 但以下属性是必需设置的,除非你确切的知道对方没有做这方面检查 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar_index); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar_index); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_REFERER,$referer_url); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 其中 $referer_url 应由目标 url 动态算出
我现在发现 ,我输出echo cookie的值,发现它 过几秒钟就在不停的变 ,感觉在不停的在登录,产生了很多cookie文件貌似就是不能 获取到 Headers Received 的 set-cookie 请问版主这个 值怎么取啊,并且取出来怎么用啊
xuzuning 2014-11-23
  • 打赏
  • 举报
回复
由于你隐去了 url,所以无法给出细节的指导 但以下属性是必需设置的,除非你确切的知道对方没有做这方面检查 curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar_index); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar_index); curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1); curl_setopt($ch,CURLOPT_REFERER,$referer_url); curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 其中 $referer_url 应由目标 url 动态算出

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧