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

Форум PHP

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

 

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

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

тема: Парсер страницы http://suncity.combats.ru/inf.pl­?login=*
 
 автор: hugi   (14.08.2007 в 01:53)   письмо автору
 
 

Я меня щас крыша поедет. Пытаюсь взять информация о герое из БК, вот код для выбивания информации из страницы
<?php
$file=@file("http://suncity.combats.ru/inf.pl?login=hugi");
$content=@implode("",$file);
print_r ($content);
?>
но он выбивает йЪ&#9577;Ч[uZы[cbЭPЙр)I&#9500;&#9555;&#65533;3ki&#9568;Edи&#8729;жрИw&#9577;счнd&#9557;И&#9555;m&#9580; ну и тому подобную фигню. Помогите, как мне открыть эту страницу. Остальные страницы из нета читаются.

   
 
 автор: 0ne   (14.08.2007 в 02:38)   письмо автору
 
   для: hugi   (14.08.2007 в 01:53)
 

А почему бы не использовать функцию:

<?php
      $content 
file_get_contents("http://suncity.combats.ru/inf.pl?login=hugi");
      
print_r ($content);
?>

   
 
 автор: Shiva   (14.08.2007 в 02:43)   письмо автору
 
   для: 0ne   (14.08.2007 в 02:38)
 

Дело не в том. Там в заголовках

Content-Encoding: gzip


Приходит сжатая страница.

   
 
 автор: Саня   (14.08.2007 в 02:44)   письмо автору
 
   для: hugi   (14.08.2007 в 01:53)
 

Просто скрипт inf.pl вычислил, что обращение идёт не из браузера и поэтому выдаёт всякую лабуду. Но что мешает прикинуться обычным браузером?
<?php
$fp 
fsockopen("suncity.combats.ru"80);
$query "GET /inf.pl?login=hugi HTTP/1.0\r\n"
        
."Host: suncity.combats.ru\r\n"
        
."Referer: http://suncity.combats.ru/\r\n"
        
."User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; ru) Opera 8.51\r\n"
        
."Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n"
        
."Accept-Language: ru,en;q=0.9\r\n"
        
."Connection: Keep-Alive\r\n"
        
."Accept-Charset: windows-1251, utf-8, utf-16, iso-8859-1;q=0.6, *;q=0.1\r\n\r\n";
fwrite($fp$query);
$buff "";
while(!
feof($fp)) $buff .= fread($fp1024);
fclose($fp);
list(
$headers$body) = explode("\r\n\r\n"$buff2);
print 
$body;

   
 
 автор: Shiva   (14.08.2007 в 02:51)   письмо автору
 
   для: Саня   (14.08.2007 в 02:44)
 

Не совсем так. Контент отсылается правильный, но с использованием сжатия gzip, которое поддерживают браузеры.
Дело в заголовке:

Accept: text/html\r\n

, который предлагает серверу не использовать сжатие.

ps.Точнее, в сочетании заголовков User-Agent и Accept
Словом, достаточно этого:

<?php
if($socketDescriptor fsockopen("suncity.combats.ru"80$error_code$error_message60))
{
    
stream_set_blocking($socketDescriptorFALSE);
      
fputs($socketDescriptor"GET /inf.pl?login=hugi HTTP/1.0\r\n"); 
       
fputs($socketDescriptor"Accept: text/html\r\n"); 
       
fputs($socketDescriptor"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"); 
    while(!
feof($socketDescriptor))
    {
        echo 
fgets($socketDescriptor4096);
    }
    
fclose($socketDescriptor);
} else echo 
$error_code.": ".$error_message;
?>

   
 
 автор: Саня   (14.08.2007 в 02:55)   письмо автору
 
   для: Shiva   (14.08.2007 в 02:51)
 

Может быть, но почему тогда gzuncompress() и gzinflate() отказываются работать?

   
 
 автор: Shiva   (14.08.2007 в 03:05)   письмо автору
 
   для: Саня   (14.08.2007 в 02:55)
 

Нужно отбросить первые 10 байтов (заголовок) и последние 4 байта (контрольная сумма).
Вот так работает:

<?php
$data
=file_get_contents("http://suncity.combats.ru/inf.pl?login=hugi");
echo 
gzinflate(substr($data10, -4));
?>

   
 
 автор: hugi   (14.08.2007 в 03:09)   письмо автору
 
   для: Shiva   (14.08.2007 в 03:05)
 

Можно вопрос: а как ты до этого додумался, ход рассуждений. На будущее.

   
 
 автор: Shiva   (14.08.2007 в 03:17)   письмо автору
 
   для: hugi   (14.08.2007 в 03:09)
 

Сделал сокет, который приводил выше, и увидел заголовки сервера, в т.ч.

Content-Encoding: gzip

   
 
 автор: hugi   (14.08.2007 в 03:07)   письмо автору
 
   для: hugi   (14.08.2007 в 01:53)
 

Дааа, никогда бы не додумался, большое спасибо.

   
 
 автор: hugi   (14.08.2007 в 03:13)   письмо автору
 
   для: hugi   (14.08.2007 в 01:53)
 

Кстати если кто может выложите ссылки на ресурсы насчет gzip, хочу разобраться.

   
Rambler's Top100
вверх

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