如何使用PHP CURL与框架?

时间:2010-10-25 02:34:28

标签: php curl

我一直在使用php curl为我学校的网络创建一个登录脚本,但我遇到了麻烦。我让我的脚本登录,但主页由框架组成。内容未显示任何一个框架,表示在服务器上找不到网址。每个框架的网址都是相对的,因此浏览器在我的服务器上查找文件而不是其他服务器(显然无法找到它们)。我使用CURLOPT_REFERER设置referer字段,但问题仍然存在。有没有一种简单的方法来解决这个相对网址问题?

1 个答案:

答案 0 :(得分:1)

首先,我想说明我知道这是一个老问题,但我在搜索卷曲解决方案时遇到过几次,并认为这对寻找这个答案的其他人有帮助。

问题澄清

根据我的理解,你可以看到框架,但你看不到框架的内容,因为框架的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 curl导航页面的示例

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