ФорумПрограммированиеPHP для идиотов → выкачка html-кода

выкачка html-кода

  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 10:51

    Всем, здравтсвуйте. У меня такой вопрос. Можно ли средствами php выкачать html-код страницы. Файл с исходником называется bank.phtml Потратил кучу времении вот, что пробовал
    1) Способ первй - самый легкий
    <?php
    // Получить содержимое файла в виде массива. В данном примере мы используем
    // обращение по протоколу HTTP для получения HTML-кода с удаленного сервера.
    $lines = file('http://www.ya.com/');
    ?>
    Результат такой - сервер очень долго думал и выдал мне следующее предупреждение:

    Warning: file(http://www.ya.ru/): failed to open stream: Bad file descriptor in f:\home\localhost\www\bank.phtml on line 2

    2) Выкачка с использованием сокетов

    <?
    $fp = fsockopen ("www.w3.org", 80, $errno, $errstr, 30);
    if (!$fp) {
    echo "$errstr ($errno)<br>";
    } else {
    fputs ($fp, "GET / HTTP/1.0\r\r");
    while (!feof($fp)) {
    $contents.=fgets ($fp,128);
    }
    fclose ($fp);
    }
    echo $contents;
    ?>

    Опять ошибка

    Warning: fsockopen() [function.fsockopen]: unable to connect to www.w3.org:80 (Попытка установить соединение была безуспешной, т.к. от другого компьютера за требуемое время не получен нужный отклик, или было разорвано уже установленное соединение из-за неверного отклика уже подключенного компьютера. ) in J:\home\localhost\www\bank.phtml on line 2

    Fatal error: Maximum execution time of 30 seconds exceeded in J:\home\localhost\www\bank.phtml on line 2

    3) Ну и вот попробовал еще вот так - неудачно

    function getpage($url){
    $cr=curl_init($url);
    curl_setopt($cr, CURLOPT_TIMEOUT, 60);
    curl_setopt($cr, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 2.4.7124)');
    curl_setopt($cr, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($cr, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($cr, CURLOPT_SSL_VERIFYHOST, 2);
    $r = curl_exec($cr);
    if(curl_error($cr)) put_file('log_error.txt','<br><b>Error</b>:'.curl_error($cr));
    curl_close($cr);
    return $r;
    }

    $page=getpage('http://www.google.ru');

    Вот результат -

    Fatal error: Call to undefined function curl_init() in J:\home\localhost\www\bank.phtml on line 3

    Сначала подумал, что у меня php устарело и в принципе не поддерживает функцию curl_init(), переустановил новый денвер (третий). И опять то же самое
    Вопрос, в принципе в следующем. Все это работает локально. Но не работает с удаленными страницами. И я понимаю почему. Но как-то не хочется ради выпонения МА-А-ЛЕНЬКОГО скрипта заводить платный хостинг. Знает ли кто-нибудь, можно ли выполнить это локально? Ну там определенные настройки Apache и PHP.
    Заранее, огромное спасибо всем ответившим
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 10:56, спустя 5 минут 4 секунды

    1, 2) пишет инвалид урл. включен ли allow_url_fopen в php.ini ?
    3) не подключен модуль curl в php.ini
    все умрут, а я изумруд
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 11:27, спустя 31 минуту 21 секунду

    Вопрос, в принципе в следующем. Все это работает локально. Но не работает с удаленными страницами. И я понимаю почему. Но как-то не хочется ради выпонения МА-А-ЛЕНЬКОГО скрипта заводить платный хостинг. Знает ли кто-нибудь, можно ли выполнить это локально? Ну там определенные настройки Apache и PHP.
    Заранее, огромное спасибо всем ответившим



    у тебя какой выход в инет ?
  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 12:56, спустя 1 час 28 минут 18 секунд

    Пытаюсь запустить скрипт на рабочей машине. Работаю в банке. И не особо разбираюсь в сетях, так что не могу ответить на вопрос welder ↓

    По-поводу


    1, 2) пишет инвалид урл. включен ли allow_url_fopen в php.ini ?
    3) не подключен модуль curl в php.ini


    allow_url_fopen у меня on
    и модуль curl тоже подключен

    Вот результат phpinfo() curl
    cURL support enabled
    cURL Information libcurl/7.16.0 OpenSSL/0.9.8d zlib/1.2.3

    Может причина в том, что использую я denwer 3, правда я скачал все дополниетльные приложения с айта для работы с cURL-ом
    Кстати, посокльку я пользователь на моем компе и у меня нет админовских прав - может это причина?
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 13:28, спустя 31 минуту 59 секунд

    ну посмотри в браузере у тя идёт через прокси сервер или нет?
  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 13:34, спустя 6 минут 15 секунд

    Через прокси сервер
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 14:03, спустя 29 минут 26 секунд

    ну делай так чтоб через прокси было

    типа этого


    <?php
    // имя прокси сервера (адрес)
    $proxy = "post";
    // порт
    $port = 8080;
    // адрес чо тырим
    $url = "http://www.pyha.ru/";
    $fp = fsockopen($proxy, $port);
    fputs($fp, "GET $url HTTP/1.0\r\nHost: $proxy\r\n\r\n");


    while(!feof($fp)){
     $text = fgets($fp, 4000);
     echo ($text);
    }
    fclose($fp);


    ?>




    или так


    <?php

    // Define a context for HTTP.
    $aContext = array(
       'http' => array(
           'proxy' => 'tcp://post:8080',
           'request_fulluri' => True,
           ),
       );
    $cxContext = stream_context_create($aContext);

    // Now all file stream functions can use this context.

    $sFile = file_get_contents("http://www.pyha.ru", False, $cxContext);

    echo $sFile;
    ?>




    а ваще на php.net много интересного если хотяб попытаться почитат
  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 14:13, спустя 10 минут 2 секунды

    Спасибо. Сейчас попробую
  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 17:16, спустя 3 часа 3 минуты 4 секунды

    Попробовал. Вот это

    <?php
    // имя прокси сервера (адрес)
    $proxy = "post";
    // порт
    $port = 8080;
    // адрес чо тырим
    $url = "http://www.pyha.ru/";
    $fp = fsockopen($proxy, $port);
    fputs($fp, "GET $url HTTP/1.0\r\nHost: $proxy\r\n\r\n");


    while(!feof($fp)){
    $text = fgets($fp, 4000);
    echo ($text);
    }
    fclose($fp);


    ?>

    Вылезает такая ошибка



    While trying to retrieve the URL: http://www.pyha.ru/

    The following error was encountered:

    Cache Access Denied.

    Sorry, you are not currently allowed to request:

    http://www.pyha.ru/
    from this cache until you have authenticated yourself.

    You need to use Netscape version 2.0 or greater, or Microsoft Internet Explorer 3.0, or an HTTP/1.1 compliant browser for this to work. Please contact the cache administrator if you have difficulties authenticating yourself or change your default password.

    Что бы это могло значить?

    ——————————————————————————–

    Generated Thu, 26 Jun 2008 13:14:17 GMT by proxy.abb (squid/2.5.STABLE9)

  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 17:19, спустя 2 минуты 45 секунд

    You need to use Netscape version 2.0 or greater, or Microsoft Internet Explorer 3.0, or an HTTP/1.1 compliant browser for this to work. Please contact the cache administrator if you have difficulties authenticating yourself or change your default password.

    неужно у тебя Netscape 1.0? O_o или IE 2.0? O_O
    все умрут, а я изумруд
  • rainurka

    Сообщения: 30 Репутация: N Группа: Кто попало

    Spritz 26 июня 2008 г. 17:22, спустя 2 минуты 28 секунд


    You need to use Netscape version 2.0 or greater, or Microsoft Internet Explorer 3.0, or an HTTP/1.1 compliant browser for this to work. Please contact the cache administrator if you have difficulties authenticating yourself or change your default password.

    неужно у тебя Netscape 1.0? O_o или IE 2.0? O_O


    Да в том то и дело, что нет
  • Trej Gun

    Сообщения: 5305 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 17:55, спустя 33 минуты 44 секунды

    md5, ты что он же из под пыхи это делает и судя по всему не отсылаються какието заголовки которые ожидает сервер

    хотя меня настораживает строчка

    $proxy = "post"; 


    он походу ее не менял….
  • md5

    Сообщения: 11960 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 18:32, спустя 37 минут 2 секунды


    md5, ты что он же из под пыхи это делает и судя по всему не отсылаються какието заголовки которые ожидает сервер
    шуткую, хлопцi

    да, вот я тоже обратил внимание…
    rainurka,
    // имя прокси сервера (адрес)
    $proxy = "post";

    тут надо адрес прокси ввести…


    всё, я домой, грязные испанки седня будут наказаны, вымыты, выбриты и масло обмазаны! )
    все умрут, а я изумруд
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 18:54, спустя 21 минуту 11 секунд

    а мне кажетцо это ответ прокси о том что нужна авторизация ему или типа того чото =)
  • welder

    Сообщения: 2945 Репутация: N Группа: в ухо

    Spritz 26 июня 2008 г. 18:59, спустя 5 минут 14 секунд

    я б даже сказал
    (squid/2.5.STABLE9)
    )))

Пожалуйста, авторизуйтесь, чтобы написать комментарий!