Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Получение информации веб-страницы (в не коммерческих целях)
 
 автор: Alessandro   (28.07.2009 в 13:22)   письмо автору
 
 

Добрый день.

Помогите, пожалуйста, решить следующий вопрос:
Необходимо получить web-страницу и дальше выполнить с полученными данными определенные действия. Как выполнить действия мне понятно. Но вот как получить нужную страницу?

С помощью ниже указанного кода получаю html текст страницы и вроде все неплохо.

<?php
// получить web-страницу в виде массива и напечатать его
fcontents file ('http://l2on.ru/?c=market&a=item&id=2626');
while (list (
$line_num$line) = each ($fcontents))
{
echo 
"<b>Line $line_num:</b>; "htmlspecialchars ($line), "<br>\n";
}


Но в зависимости от выбранного в правом верхнем углу в выпадающем меню игровом сервере, основная информация на странице изменяется.

Line 29:; <select size="1" id="world" name="world" onchange="window.location.href='/?c=market&a=item&id=262 
Line 30:; 
Line 31:; 6&world='+document.getElementById('world').value;"> 
Line 32:; <option selected value=43>Cadmus</option><option value=44>Athebaldt</option><option value=45>Blackbird</option><option value=46>Ramsheart</option><option value=47>Esthus</option><option value=48>Vasper</option><option value=49>Lancer</option><option value=51>Waytrel</option><option value=61>Desperion</option><option value=64>Faris</option></select>

Как я понял по этому тексту, чтобы выбрать мой сервер Waytrel ссылка должна выглядеть так : 'http://l2on.ru/?c=market&a=item&id=2626&world=51'.
И действительно если напрямую через браузер заходить по этой ссылке, изначально выбирается сервер Waytrel, но если я вставляю эту ссылку в код, ничего не происходить, он продолжает получать изначальную страницу 'http://l2on.ru/?c=market&a=item&id=2626’ не обращая внимания на окончание.
Как же мне получить страницу именно моего сервера ?

  Ответить  
 
 автор: x64   (28.07.2009 в 13:30)   письмо автору
 
   для: Alessandro   (28.07.2009 в 13:22)
 

а не проще использовать
$buf = file_get_contents($url);


дополнение:

посмотрел по заголовкам
http://l2on.ru/?c=market&a=item&id=2626&world=51 возвращает 302 и редирект на /?c=market&a=item&id=2626

видимо, нужно работать через сокеты (не забыв передать полученные по первому запросу куки)

  Ответить  
 
 автор: Alessandro   (28.07.2009 в 16:03)   письмо автору
 
   для: x64   (28.07.2009 в 13:30)
 

А можно немного поподробнее куда двигаться ?

  Ответить  
 
 автор: x64   (28.07.2009 в 16:24)   письмо автору
 
   для: Alessandro   (28.07.2009 в 16:03)
 

возможно, это поможет http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=9050

  Ответить  
 
 автор: VITtek   (28.07.2009 в 20:48)   письмо автору
 
   для: Alessandro   (28.07.2009 в 13:22)
 

Всё дело в сессиях (при том она ещё статичная). Вота юзай … не забудь «разковычить» curl в php.ini

<?
$ch 
curl_init("http://l2on.ru/?c=market&a=item&id=2626");
$ua "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1";
curl_setopt($chCURLOPT_USERAGENT$ua);
curl_setopt ($chCURLOPT_COOKIE"PHPSESSID=oku1mpsj3l62d37oe5r98m4801; world=51;");
curl_setopt ($chCURLOPT_HEADER1);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
$output curl_exec ($ch);
curl_close($ch);
print_r($output);
?>

  Ответить  
 
 автор: Alessandro   (30.07.2009 в 19:33)   письмо автору
 
   для: VITtek   (28.07.2009 в 20:48)
 

Вот спасибо тебе, VITtek. Я тоже нашел, но у тебя значительно короче.


function CurlPage ( $path ) {
    // $path - страничка, какую смотрим
global $agent, $header, $referer, $arr_cookie, $cookie_file;

    // вызываем сеанс Curl
$ch = curl_init ( $path );
    // CURL будет возвращать результат, а не выводить его в печать
@curl_setopt ( $ch , CURLOPT_RETURNTRANSFER , 1 );
    // выводим подробные сообщения о всех действиях
@curl_setopt ( $ch , CURLOPT_VERBOSE , 1 ); 
    // считываем страничку с хедером от сервера
@curl_setopt ( $ch , CURLOPT_HEADER , 1 );
    // отправим серверу user_agent сформированный нами самими
@curl_setopt ( $ch , CURLOPT_USERAGENT , $agent );
    // оправляем $referer, что пришли с первой страницы сайта
@curl_setopt ( $ch , CURLOPT_REFERER , $referer );
    // оправляем на сервер хедер, который мы сами сформировали
@curl_setopt ( $ch , CURLOPT_HTTPHEADER , $header );
    // при получении HTTP заголовка "Location: " будет 
    // происходить перенаправление
@curl_setopt ( $ch , CURLOPT_FOLLOWLOCATION , 1 );
    // запретить проверку сертификата удаленного сервера
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER, 0 );
    // не будем проверять существование имени
@curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST, 0 );
    // если есть массив с cookie, то отправим серверу, эти cookie
if ( @is_array ($arr_cookie)){
      while (list($key, $val) = @each ($arr_cookie)){
      $COKKIES .= trim ($val[0])."=". trim ($val[1])."; ";
       }
@curl_setopt ( $ch , CURLOPT_COOKIE , $COKKIES." expires=Mon, 14-Apr-08 10:34:13 GMT" );
}
    // если с сервера пришло cookie, то запишем его в файл $cookie_file
@curl_setopt ( $ch , CURLOPT_COOKIEJAR , $cookie_file );
@curl_setopt ( $ch , CURLOPT_COOKIEFILE , $cookie_file );
    // если мы послали данные из формы, которая стоит 
    // на страничке $path, добавляем метод $_POST
if (isset($_POST) and $_SERVER["REQUEST_METHOD"]=="POST"){
     @curl_setopt ( $ch , CURLOPT_POST , 1 );
     @curl_setopt ( $ch , CURLOPT_POSTFIELDS , substr ( data_encode ( $_POST ), 0 , - 1 ) );

    // получаем страничку $path с хедером
$tmp = @curl_exec ( $ch );
    // закрываем сеанс Curl
curl_close ( $ch ); 

    // если Curl ничего не вывел пробуем это сделать output_r();
    // эта функция описана здесь, она использует сокет.
if ($tmp==''){ $tmp = output_r ($path); }
return $tmp;
}
$page = 'http://l2on.ru/?c=market&a=item&id=2626&world=51';
    // распечатаем страничку
$pag=CurlPage($page);

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования