2011-02-17 46 views
0

我已經建立了一個curl請求,它可以在許多站點上正常工作,其中大部分使用框架,並且在返回相關消息的情況下使用noframes標籤,如果瀏覽器使用的框架不支持框架,則返回整頁框架集,我使用Domdocument遍歷。如何讓CURL請求返回'noframes'頁面?

但是,一個站點只會返回頁面,指出'您將需要支持框架的瀏覽器'。我正在通過CURLOPT_USERAGENT,Mozilla/5.0(Windows; U; Windows NT 6.1; en-GB; rv:1.9.2.13)Gecko/20101203 Firefox/3.6.13,我已經嘗試了許多用戶代理定義並且閱讀嘗試了各種其他捲曲選項,但沒有運氣。

我在工作站點和不工作站點之間唯一的區別是聲明瞭doctype: !DOCTYPE html PUBLIC「 - // W3C // DTD XHTML 1.0 Frameset // EN」「http ://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd「

而正常工作的網站聲明doctype爲: !DOCTYPE html PUBLIC」 - // W3C // DTD XHTML 1.0 Transitional // EN「」http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd「

有問題的網址是:http://www.sainsburys.co.uk/雜貨/ index.jsp

我當然可以通過使用直接url鏈接到框架集中的鏈接來訪問我想要的框架集,但我寧願從索引文件入口點開始,而不是硬編碼指向我隨時間變化的頁面的鏈接。

任何意見或捲曲腳本的作品,將不勝感激。

順便說一句:所收集信息的使用在可接受的使用範圍內。

+0

你應該比較提琴手的請求。 – SLaks 2011-02-17 14:16:29

回答

0

我得到完整的頁面幀,但有兩個要求:
第一:請求index.jsp轉到從javascript代碼獲取會話數據。
秒:再次請求index.jsp,但是這次將會話數據傳遞給它。
這是我用來做這樣的代碼:

<?php 

function getGROSESSIONID(){ 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, 'http://www.sainsburys.co.uk/groceries/index.jsp'); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $page_contents = curl_exec($ch); 

    curl_close($ch); 

    if(preg_match('/window\.location\.replace\(\"http\:\/\/www\.sainsburys\.co\.uk\/groceries\/frameset\/redirect\.jsp\;(.*)\"\)\;/', $page_contents, $matches)){ 
     return $matches[1]; 
    } 
    return false; 
} 

function getSainsburysIndex($session_data){ 
    if($session_data == ''){ 
     return false; 
    } 
    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_URL, 'http://www.sainsburys.co.uk/groceries/index.jsp;'.$session_data); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9) Gecko/2008052906 Firefox/3.0'); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    $page_contents = curl_exec($ch); 

    curl_close($ch); 

    return $page_contents; 
} 

$sessData = getGROSESSIONID(); 

if(false !== $sessData){ 
    echo "<pre>"; 
    print_r(htmlspecialchars(getSainsburysIndex($sessData))); 
    echo "</pre>"; 
}else{ 
    echo "can not get session id."; 
} 
?> 
+0

穆罕默德,你的明星,非常感謝你! – Rich2020 2011-02-17 16:39:34