2010-10-25 2 views
1

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

+0

Почему вы используете локон? Фреймы должны быть определены в html, и адрес должен быть абсолютным URL-адресом, если это страница с другого сервера. – cambraca

+0

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

ответ

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 локон навигации страницу

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

Смежные вопросы