2010-10-25 48 views
1

我一直在使用php curl爲我的學校的網絡創建一個登錄腳本,但我遇到了一個障礙。我有我的腳本登錄,但主頁是由框架組成的。內容不顯示任何一個框架,說服務器上找不到網址。每個框架的url都是相對的,所以瀏覽器在我的服務器上查找文件而不是其他服務器(顯然不會找到它們)。我用CURLOPT_REFERER設置了referer字段,但問題依然存在。有沒有簡單的方法來解決這個相對的URL問題?如何在框架中使用PHP CURL?

+0

?框架應該在html中定義,並且地址應該是絕對url,如果它是來自另一個服務器的頁面。 – cambraca 2010-10-25 04:23:26

+0

我不編碼登錄頁面,我試圖構建一個腳本,該腳本自動將我記錄到學校的網絡和收集頁面日期。問題在於學校的登錄主頁由2個框架和相關的url組成。所以當我執行腳本時,瀏覽器正在搜索我的服務器(它只是託管腳本)而不是學校的服務器。有沒有一種簡單的方法可以讓curl查找與腳本託管地址不同的地址處的所有相關url? – 2010-10-25 17:56:54

回答

1

首先,我想說我知道這是一個古老的問題,但我在搜索curl解決方案時碰到過幾次,並認爲這對其他人尋找這個答案會有所幫助。

問題澄清

據我瞭解,你能看到的框架,但你不能看到框的內容,因爲框架的src屬性是相對的。你也希望通過php curl來關注框架。

示例代碼

<?php 
// Simple curl function 
function get_page($url){ 
    $msg = ""; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    $html = curl_exec($ch); 

    if (!curl_errno($ch)) { 
     $msg = $html; 
    } else { 
     $msg = 'Curl error: ' . curl_error($ch); 
    } 
    curl_close($ch); 

    return $msg; 
} 
// Desired domain 
$domain = "http://www.w3schools.com"; 
$page_content = get_page("$domain/tags/tryit.asp?filename=tryhtml_iframe"); 
// Display fetched page 
var_dump($page_content); 
// Navigate dom to iframe in question 
$xml = new DOMDocument(); 
@$xml->loadHTML($page_content); 
$path = new DOMXPath($xml); 
$forms = $path->query("//iframe[@id='iframeResult']"); 
$relative_uri = ""; 
foreach ($forms as $form) { 
    // Should be only 1 result 
    if (strtolower($form->getAttribute('id')) === strtolower("iframeResult")) { 
     $relative_uri = $form->getAttribute('src'); 
    } 
} 
// Display fetched iframe 
$page_content = get_page("$domain/tags/$relative_uri"); 
var_dump($page_content); 
?> 

注意事項例

我選擇www.w3schools.com因爲我猜測,他們的榜樣將有一段時間沒有改變,可能會得到更好的比一些隨機選擇的網站準時。

我還想指出,w3schools網站上的正確示例框架本身是一個相對框架,而不是它們顯示的實際示例框架!通過在元素檢查器中搜索iframeResult來尋找自己。

運行實例

頁被導航

http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_iframe

PHP捲曲的例子,爲什麼您使用的導航捲曲的頁面

http://ipatenco.com/example/curl-iframe.php