有高人熟悉CURL不,我想抓回www.shenzhenair.com的国内机票信息,这个shenzhenair会在第1次查询的时候生成一个strIdentity值,但我把这个值获取回来后再次查询就说这次查询已过期,有人知道解决方法不,急啊,分不够还可以再加。

解决方案 »

  1.   

    这个strIdentity值应该是在使用过后就销毁了,LZ如果有办法可以在他销毁前得到这个值并且应用就可以了
      

  2.   

    把上一次查询的cookie也送过去试一下
      

  3.   

    我在获取strIdentity后就中止这个页面运行了,但还是不行。
      

  4.   

    一定要用CURL吗。具体要求还是听得有点模糊!
      

  5.   

    我是说通过curl把旧的cookie送过去,等你接到内容,那边已经把session改变了
      

  6.   

    LZ抓一下他在http://www.shenzhenair.com/common/flightSearch.do这个时候还传了什么参数
      

  7.   

    这个用抓包工具 如 httpwatch 看一下传了那些参数
    然后模拟post过去,要模拟浏览器,要伪造来路
    每一次都要抓cookie,传cookie
      

  8.   

    估计是没有携带session cookie,开启cookiejar属性试试看?
      

  9.   

    没搜索到合适的资料,有哪位大佬有抓取和发送COOKIES的代码呀,万分感谢呀
      

  10.   

    我在第1次抓取的时候加了
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
    对应的路径也生成了COOKIES文件,在第2次抓取的时候
    curl_setopt($curl, CURLOPT_COOKIE, $cookie_jar);
    但结果还是显示本页面已失效,有高手能花点时间试试不,急
      

  11.   

    验证通过,及时结贴给分啊$url = "http://www.shenzhenair.com/common/flightSearch.do"; 
    $referer = 'http://www.shenzhenair.com/common/flightSearch.do?operate=goLoadingPage&originalPage=index&lan=zh';
    $cookie_jar = dirname(__FILE__)."/cookie.txt"; 
    $timeout = 1;  
    $mudedi1 = urlencode("SZX;S-深圳");
    $mudedi2 = urlencode("PEK;B-北京");
    $data = "productId=00000000001&PRODUCT_ID=000000000448&orgDate10=2011-04-10&orgDate20=&allVar=&operate=goLoadingPage&platID=plat_1&originalPage=wshdpGN&flightConditionEntity.changedOrgCity=&flightConditionEntity.hbType=GN&flightConditionEntity.orgCity1[0]=".$mudedi1."&orgCity10=".$mudedi1."&flightConditionEntity.dstCity0=".$mudedi2."&flightConditionEntity.orgDate1[0]=2011-04-10&flightConditionEntity.orgDate2[0]=&flightConditionEntity.hcType=DC";
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt($ch, CURLOPT_REFERER, $referer);  
    curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);  
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_jar);
    $contents = curl_exec($ch);
    curl_close($ch); if(preg_match('/<input\s+type="hidden"\s*name="strIdentity"\s+value="(.*?)"\/>/i',$contents,$arr)){
      $strIdentity = $arr[1];
    }
    $ch = curl_init();
    $timeout = 1; 
    $mudedi1 = "SZX;S-深圳";
    $mudedi2 = "PEK;B-北京";
    $mudedi1 = urlencode("SZX;S-深圳");
    $mudedi2 = urlencode("PEK;B-北京");
    $data = "operate=flightSearch&originalPage=index&flightConditionEntity.hcType=DC&flightConditionEntity.hbType=GN&flightConditionEntity.productId=&flightConditionEntity.orgDate=&flightConditionEntity.orgCity2=".$mudedi1."&flightConditionEntity.orgCity3=".$mudedi1."&flightConditionEntity.orgCity=&orgCity10=".$mudedi1."&orgDate10=2011-04-10&orgDate20=&transfer=0&flightConditionEntity.dstCity=&flightConditionEntity.dstCity0=".$mudedi2."&flightConditionEntity.dstCity1=&flightConditionEntity.dstCity2=&flightConditionEntity.dstCity3=&flightConditionEntity.isExchangeFreeTicket=false&isChangedDay=null&strIdentity=".$strIdentity;
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);  
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    curl_setopt($ch, CURLOPT_REFERER, $referer);  
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    $contents = curl_exec($ch);
    echo $contents.'<br>';
    curl_close($ch);