2011-12-07 69 views
1
  1. Script output。 (碎)
  2. Start page
  3. Frame page
  4. End page

我想不通,我錯過了什麼。我試圖模仿Firefox的請求標題,但它不起作用。 此外,框架頁面使用javascript ajax請求到達結束頁面。它將數據發佈到$post_to_link(請參閱下面的代碼),然後導航到大容量鏈接所在的expected result(而不是我的current result)。PHP:使用curl或file_get_contents無法檢索正確的ajax響應

預期輸出:/membersonly/components/com_iceplayer/GMorBMlet.php?url=http%3A%2F%2Fwww.megaupload.com%2F%3Fd%3DVNICBFWL&

電流輸出:

  • 的file_get_contents輸出3
  • 捲曲輸出誤差403被禁止訪問

這是我的代碼:

// call it like so... 
    echo GetHosterLink(1148, 252636, '', '37fn8Oklq', 15, -75); 
    // $s is incremented every second you are 'visiting' the referer page 
    // $m decreases below zero when you move your mouse `down` on the start page 

    function GetHosterLink($id, $link_id, $cap, $sec, $s, $m) 
    { 

     $link_page = str_replace('[ID]', $id, 'http://www.icefilms.info/membersonly/components/com_iceplayer/video.php?vid=[ID]'); 
     $post = "id={$link_id}&s={$s}&iqs=&url=&m={$m}&cap=&sec={$sec}&t={$id}"; 

     $header = implode("\r\n", array(
      "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", 
      "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7", 
      "Accept-Encoding: gzip, deflate", 
      "Accept-Language: en-us,en;q=0.5", 
      "Cache-Control: no-cache", 
      "Connection: keep-alive", 
      "Content-Length: " . strlen($post), 
      "Content-Type: application/x-www-form-urlencoded; charset=UTF-8", 
      "Host: www.icefilms.info", 
      "Pragma: no-cache", 
      "Referer: http://www.icefilms.info/membersonly/components/com_iceplayer/video.php?h=374&w=631&vid={$id}&img=", 
      "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0" 
     )); 

     $opts = array('http' => 
      array(
       'method' => 'POST', 
       'header' => implode("\r\n", 
        array(
         'Content-type: application/x-www-form-urlencoded', 
         'Content-length: ' . strlen($post), 
         'Referer: ' . $link_page . '&h=374&w=631', 
         'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0) Gecko/20100101 Firefox/8.0', 
         'Host: www.icefilms.info' 
        ) 
       ), 
       'content' => http_build_query(
        array(
         'id' => $link_id, 
         's' => $s, 
         'sec' => $sec, 
         't' => $id, 
         'm' => $m, 
         'iqs' => '', 
         'url' => '', 
         'cap' => '' 
        ) 
       ) 
      ) 
     ); 

     $context = stream_context_create($opts); 

     $post_to_link = 'http://www.icefilms.info/membersonly/components/com_iceplayer/video.phpAjaxResp.php'; 
     $get_result = file_get_contents($post_to_link, false, $context); 

     $f_result = cURL::DoRequest($post_to_link, $post, '', 
      array(array(CURLOPT_HTTPHEADER, $header))); 

     $f_r = array(
      'result' => $f_result, 
      'get_result' => $get_result, 
      'get_opts' => $opts, 
      'get_response' => $http_response_header, 
      'req_post' => $post, 
      'req_href' => $post_to_link, 
      'req_header' => $header 
     ); 

     return ($f_r); 

    } 

這裏是我的curl.php文件:

class cURL 
{ 

    public static function DoRequest($url, $post = '', 
     $cookie_file = '', $variables = array()) 
    { 

     $curl = curl_init(); 
     @session_start(); 
     $cookie = ('PHPSESSID=' . session_id() . '; path=/'); 
     @session_write_close(); 

     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($curl, CURLOPT_COOKIE, $cookie); 

     if (!empty($cookie_file)) 
     { 

      curl_setopt($curl, CURLOPT_COOKIEFILE, $cookie_file); 
      curl_setopt($curl, CURLOPT_COOKIEJAR, $cookie_file); 

     } 

     if (!empty($post)) 
     { 

      //curl_setopt($curl, CURLOPT_POST, 1); 
      curl_setopt($curl, CURLOPT_POSTFIELDS, $post); 

     } 

     foreach ($variables as $var) 
      curl_setopt($curl, $var[0], $var[1]); 

     $result = curl_exec($curl); 
     curl_close($curl); 

     return ($result); 

    } 

} 
+3

每個人都需要一些幫助。使標題成爲你的問題的摘要 – random

+0

[tag:gimme-codez]? – Neal

+0

我改變了標題。 –

回答

3

嘗試訪問初始頁面(你在$link_page擁有自己的網址),捲曲,並確保您指向該文件:

curl_setopt($curl, CURLOPT_COOKIE, $cookie); 

存在,是可寫的。

然後請求具有相同捲曲資源的$post_to_link url。

通過訪問初始頁面,您將收到Cookie並確保您的下一個請求有有效的會話。這也可以確保您在頭文件中提供的引用。有很多方法可以確定「自動」請求,諸如檢查cookie以及如果實際訪問「引用者」鏈接的情況非常普遍。

+0

正是我在想什麼:) – s3v3n

+0

+1我還猜測這是一個會話/ cookie保護會員區。使用curl登錄,獲取cookie並重新使用存儲的cookie似乎是正確的軌道。 – Kaii

相關問題