|
|
|
| Добрый день.
Помогите, пожалуйста, решить следующий вопрос:
Необходимо получить 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’ не обращая внимания на окончание.
Как же мне получить страницу именно моего сервера ? | |
|
|
|
|
|
|
|
для: 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
видимо, нужно работать через сокеты (не забыв передать полученные по первому запросу куки) | |
|
|
|
|
|
|
|
для: x64
(28.07.2009 в 13:30)
| | А можно немного поподробнее куда двигаться ? | |
|
|
| |
|
|
|
|
для: 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($ch, CURLOPT_USERAGENT, $ua);
curl_setopt ($ch, CURLOPT_COOKIE, "PHPSESSID=oku1mpsj3l62d37oe5r98m4801; world=51;");
curl_setopt ($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec ($ch);
curl_close($ch);
print_r($output);
?>
|
| |
|
|
|
|
|
|
|
для: 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);
|
| |
|
|
|
|