alhames.ru
У мну еще вопрос (че-то только я и спрашиваю)..
Требуется загрузить html-содержимое странички с удаленного сервера и присвоить как строку.
Т.е. например, существует php-файл, доступный по некому адресу (например, tra-ta-ta.com), необходимо присвоить переменной $ruweb весь html-код странички, генерируемой по запросу "diary.ru/~ruweb/" -как это сделать?
Требуется загрузить html-содержимое странички с удаленного сервера и присвоить как строку.
Т.е. например, существует php-файл, доступный по некому адресу (например, tra-ta-ta.com), необходимо присвоить переменной $ruweb весь html-код странички, генерируемой по запросу "diary.ru/~ruweb/" -как это сделать?
Или я не понял суть?))
Сколько парсеров уже написал и никогда сокет-соединения не делал)
код:
$ruweb = "";
// инициализируем переменную, чтобы было хорошо
$packet = "GET /~ruweb/ HTTP/1.0\r\n
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n
Accept-Language: ru\r\n
User-Agent: User-Agent: Mozila 4.0\r\n
Host: pay.diary.ru\r\n
Proxy-Connection: Keep-Alive\r\n";
// создадим отправляемый пакет чтобы дайри знали что нам нужно
$sock = fsockopen("pay.diary.ru", 80, $errno, $errstr, 10);
// откроем сокет на дайри.ру по 80(хттп) порту
if(!$sock)
{
$send = "Невозможно подключиться к серверу!";
// известим себя об ожибках, если ткие случились
} else {
fwrite($sock, $packet);
while (!feof($sock)){
$ruweb .= fgets($sock,1024);
// вкушаем сообщество ~ruweb небольшими порциями по 1 кб
}
fclose($sock);
// закроем соккет, чтобы не висел зазря
}
// теперь в переменной $ruweb лежит главная страничка сообщества ~ruweb
// делайте с ней что хотите ЗЫ но в данном случае, имхо, лучше подошёл
// бы iframe
Вот например функция для получения содержимого страницы с отправкой ГЕТ запроса. Возвращает не только саму страницу, но и хеды.
function socket_get($host,$sсriрt,$query='')
{
global $settings;
$query_string='';
foreach ($query as $key => $value)
{
$query_string.="&$key=".rawurlencode($value);
}
$query_string=substr($query_string,1,strlen($query_string)-1);
$fs=@fsockopen($host,80);
if(!$fs) return false; else {
fwrite($fs, "GET /$sсriрt?$query_string HTTP/1.0
");
fwrite($fs, "Referer: ".$settings['url']."
");
fwrite($fs, "Host: $host
");
fwrite($fs, "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
");
$data='';
while(!feof($fs))
{
$data.=fread($fs,256);
}
fclose($fs);
}
return $data;
}
Вызывается вот так:
$query['name']='Wolfy';
$query['last_name']='J D';
echo socket_get('www.somewhere.ru/','userlist.php',$query);
С сокетами мне еще работать не приходилось, так что придется в мануале рыться..
P.S. Когда код публикуете, если не трудно, обрабатывайте его сначала здесь - Подсветка PHP кода (ссылку можно найти в навигационном меню в самом низу)
Ах да, и еще хотел спросить.. Как дайры обрабатывают запрос типа "diary.ru/~ruweb"?