绝顶高手来解答,能模拟登录成功也能抓取到登录后看到的页面,就是不能抓取到登录成功后继续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 数据然抓取跳转后的页面啊

解决方案 »

  1.   

    由于你隐去了 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 动态算出
      

  2.   

    参考:http://blog.csdn.net/fdipzone/article/details/8821957
      

  3.   

    我现在发现 ,我输出echo cookie的值,发现它 过几秒钟就在不停的变 ,感觉在不停的在登录,产生了很多cookie文件貌似就是不能 获取到 Headers Received 的 set-cookie 请问版主这个 值怎么取啊,并且取出来怎么用啊