php и fsockopen

T
На сайте с 01.10.2004
Offline
73
752

Знатоки, прошу помощи.

Голову сломал.

Имеем простенький скрипт:


<?
$fp = fsockopen("www.aport.ru", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.aport.ru\r\n";
$out .= "Connection: Close\r\n\r\n";

fwrite($fp, $out);
while (!feof($fp)) {
echo fread($fp, 128);
}
fclose($fp);
}
?>

В результате получаем содержимое страницы www.aport.ru, что понятно. Но что там за шестнадцатеричные числа по тексту? Откуда они взялись? Стазу после заголовков "1054", потом "111d", потом "1059" и т.д. Заканчивается это "0" в конце документа.


HTTP/1.1 200 OK
Date: Wed, 10 Dec 2008 09:53:38 GMT
Server: Apache/1.3.41 (Unix) mod_ssl/2.8.31 OpenSSL/0.9.8d mod_gzip/1.3.26.1a mod_fastcgi/2.4.6 PHP/5.2.6 mod_perl/1.30 rus/PL30.22
X-Powered-By: PHP/5.2.6
Set-Cookie: css=loaded
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=windows-1251

1054 <------ что за хрень???
<html><head><title>Апорт: поисковая система</title>

...................

</body></html>

0 <------ что за хрень???

Подобное поведение встречается всякий раз, когда сервер не отдает заголовок Content-Lenght.

Нигде не нашел описания этой хрени.

Как подавить вывод этих цифр? Применять функции file() и file_get_contents() не предлагать.

HC
На сайте с 24.05.2006
Offline
46
#1

Используйте

$out = "GET / HTTP/1.0\r\n";
Система управления сайтом HostCMS (http://www.HostCMS.ru) - многосайтовость, множество модулей, обмен с 1С, бесплатная версия. Скидка 40% на систему управления для дилеров (http://www.hostcms.ru/partners/partnership/) и 20% для партнеров-фрилансеров (http://www.hostcms.ru/partners/freelance/).
T.R.O.N
На сайте с 18.05.2004
Offline
314
#2
telo:
1054 <------ что за хрень???

информация о пакетах по протоколу HTTP1.1

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

PS Прикол состоит в том, что яшин бот, например, вобще не понимает, если ему пытаешся отдавать поток по 1.0

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
T
На сайте с 01.10.2004
Offline
73
#3

Сэры, премного благодарю за науку! Теперь все работает. :)

0
На сайте с 19.09.2007
Offline
55
#4

Эта хрень называется

Transfer-Encoding: chunked

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий