Недополучаю ответ через сокеты
Написал несложный скрипт для получения контента через сокеты, но возникла проблема - я не дополучаю до конца ответ. То есть где-то первые 3-4 кб загружаются и все - дальше работа прекращается. Почему - непонятно. Ошибок никаких не выводит. Причем самое интересное то, что иногда успевает получить 3 кб, а иногда 4. И такое не со всеми сайтами. Например страницу yandex.ru (я щас только проверил) он получает полностью, а страницу ya.ru например нет.
<?
$result = '';
$server_ip = 'yandex.ru';
$server_port = '80';
$host = 'yandex.ru';
$s = fsockopen($server_ip, $server_port);
$d = fputs ($s, "GET http://yandex.ru \n");
fputs ($s, "Connection: Keep-Alive \n");
fputs ($s, "User-Agent: Opera/9.50 (Windows NT 5.1; U; ru) \n");
fputs ($s, "Host: http://$host\n");
fputs ($s, "Accept: */*\n");
fputs ($s, "Accept-Language: ru \n");
fputs ($s, "Referer: http://yandex.ru \n");
fputs ($s, "Content-type: * \n");
fputs ($s, "Pragma: no-cache\n");
fputs ($s, "Cache-Control: no-cache\n");
fputs ($s, "Connection: close\n\n");
while (!feof($s)) $result .= fgets($s, 1000000);
//if(strpos("TTP/1.1 404 Not FoundDate:",$result)) $result=false;
echo $result;
fclose($s);
?>
Только я чегойто всегда думал, что заголовки нужно завершать комбинацией \r\n, а не просто \n.
P.S. Вот сейчас освежил свою память. Действительно стандарт HTTP требует \r\n.
Да, вы совершенно правы. Но внесенная правка на ход событий не повлияла. Вопрос остается открыт - контент почему-то не докачивается
Цитата: Данила
Да, вы совершенно правы. Но внесенная правка на ход событий не повлияла. Вопрос остается открыт - контент почему-то не докачивается
Было такое. Посмотреть версию протокола и способ сжатия/кодирования ответа. Используйте curl и будет вам щастье.