Как использовать PHP CURL с фреймами? - PullRequest
1 голос
/ 25 октября 2010

Я работал с php curl, чтобы создать скрипт входа в сеть для моей школы, но я столкнулся с проблемой.Я получил свой скрипт для входа в систему, но домашняя страница состоит из фреймов.Контент не отображается ни для одного из фреймов, говоря, что URL не найден на сервере.URL-адреса для каждого из кадров являются относительными, поэтому браузер ищет файлы на моем сервере, а не на другом сервере (и, очевидно, не найдет их).Я установил поле реферера с помощью CURLOPT_REFERER, но проблема остается.Есть ли простой способ обойти эту проблему относительных URL?

1 Ответ

1 голос
/ 04 октября 2013

Прежде всего, я хотел бы заявить, что я знаю, что это старый вопрос, но я сталкивался с ним несколько раз при поиске решений для завитков и думаю, что это будет полезно для других людей, ищущих этот ответ.

Уточнение вопроса

Насколько я понимаю, вы можете видеть рамку, но не можете видеть содержимое рамки, потому что атрибут 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);
?>

Примечания к примеру

IВыберите www.w3schools.com, потому что я предполагаю, что их пример не изменится через некоторое время и, вероятно, будет лучше работать, чем некоторые случайно выбранные веб-сайты.

Я также хотел бы заявить, что правильный примерсама рамка на сайте w3schools - это относительная рамка, а не пример кадра, который они показывают!Ищите себя, ища iframeResult в инспекторе элементов.

Пример выполнения

Страница для навигации

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

Пример php curl навигации по странице

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...