2010-10-25 47 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