[php, сокет] в чём неверность алгоритма?
Transfer-Encoding: chunked
Тогда дело в ней, скорее всего.
0xeac = 3756 байт.
Что б не мучаться замени протокол с 1.1 на 1.0.
Это длина контентаТолько чуть хитрее - это длина контента до следующей такой бяки (очередного блока с длиной, то есть)
0xeac = 3756 байт.
так написано в стандарте HTTP ?
сейчас проверю
Всё верно... eac - это объём куска с данными, за ним следует заголовок блок с длиной следующего куска, и т.д. Только включается ли длина заголовка в длину следующего куска - не помню, но вроде нет, в любом случае это несложно проверить.
0x10d - это как раз длина пакета, 269 байт. То есть здесь не хватает 4 байт, а точнее - последний блок, где 0 стоит, какой-то неправильный...
А, не туда посмотрел... Пока думаю...
А ты случаем в каком-нибудь обычном редакторе этот файл не открывал? Дело в том, что у меня для перевода строки в этом форуме использется просто 0x0a, а не 0x0d0a... Какая-то программа, возможно, что-то скорректировала, или не может ли быть так, что ты в файл некорректно сохранил? Например открыл его как "w", вместо "wb"? Правда php вроде как "wb" всегда открывает...
?
если у тебя сервера есать под рукой, можешь запустить скрипт и посмотреть, может он выдаёт другое(?).
Напиши
GET / HTTP/1.0вместо
GET / HTTP/1.1и не парься.
зачёт и тема закрыта
Я посмотрел, что выдаёт конкретно forum.b.gz.ru - вот, у тебя сохранено неправильно, то есть в исходный файл, если ты это делал через fwrite, может и правильно сохранено, но на каком-то этапе - ошибка. Переход на следующую строку в коде страниц форума - без "\r" (то есть без 0x0d). На каком этапе это у тебя появляется - нужно искать.
echo file_get_contents('');
Например, написать прокси-сервер на пхп...
$str=fgets(...);
fwrite($file,$str."\n");
А можно ли как-нибудь в php обойтись без сокетов, но установить свои поля user-agent, referer и другие? Про агент вроде сказано, что только правкой php.ini лечится, а про referer вообще не представляю... Верю, что как-нибудь возможно, но как - не знаю...
Если да, то это можно сделать так:
$ch=curl_init;
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_URL,"forum.local");
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch,CURLOPT_REFERER,"http://forum.b.gz.ru/");
$data=curl_exec($ch);
curl_close($ch);
Нет, текст скрипта я привёл, а сохраняю его вывод (echo скачивая его содержимое оперой на диск. Но в любом случае 1.0 решил проблему.
Оставить комментарий
356ft85
подскажите, пожалуйста.Этот алгоритм полчуает содержимое удалённого файла,
но в результате выводится помимо содержимого ещё что-то, неотносящееся к нему,
например, в начале потока появляются три символа
eac, а затем идёт содержимое страницы