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