![]() |
сокеты
вот скажите мне, как через протокол http 1.1 снять копию контента с удаленного web сервера, без дополнений и изменений считывая построчно функцией
fgets($f,1024); если сервер не отдает content-lenght и использует кодирование Transfer-Encoding: chunked ?? вот вам и пример ответа этого форума: Код:
HTTP/1.1 200 OK ведь браузер и прокси както избавляются от этих символов перед выдачей на экран, но как??(( сам скрипт запроса ниже, возможно его надо дополнить для решения этой задачи, но чем?? PHP код:
|
E-mail
А обязательно нужно по HTTP 1.1 запрашивать?? Я например в основном делаю запросы по версии 1.0, там например нет всех этих проблем с chunked |
vadimiron
мы не ищем легких путей:) да дело на самом деле не в легком пути, просто этот протокол де факто, порядком уже устарел как никак более 10 лет спецификации, да и там вообще ничего нет почти, к счастью нужно через http 1.1 .. в общем не до комца еще разобрался с этим алгоритмом передачи, что делать когда сервер не отдает длину тела.. |
E-mail
Да длинну тела то не обязательно знать, читай пока сокет чтото возвращает и всё (но это конечно только для 1.0) Другое дело как обходиться с Transfer-Encoding: chunked Фишка в том, что это число (106b4) и есть размер, но вроде в восмиричной системе Ноль в конце означает, что больше нет данных для передачи. То есть можно сообщение на много кусков разбить, какждый кусок начинается с размера куска, потом <CR><LF>, далее сам кусок, и так далее... а заканчивается на 0<CR><LF> |
vadimiron в 16-ричной,
я пытаюсь понять по какому алгоритму браузеры и прокси обрезают эти размеры кусков, они для каждой страницы свои, и кусков для каждой страницы свое количество и еще насколько понимаю размер не до а после куска идет |
Цитата:
Цитата:
сначало берём строчку до первого <CR><LF>, эта строчка является размером куска, далее читаем столько символов, на сколько этот размер указывает, далее снова читаем строчку с размером и тд..... если строчка с размером равна 0, значит больше не читаем Кстати, эту всю историю с Transfer-Encoding: chunked как раз придумали, чтобы отсылать куски ещё неполностью сгенерированного документа, поэтому полный размер и нельзя знать. |
106b4 - это рамер того что было до, следовательно цифра пишется после куска
Цитата:
как ты отделишь размер куска от самого куска пример к скрипту в студию можно?) например к меилру |
E-mail
Цитата:
Код могу завтра написать, смысл прост: после хедеров читаем с помощью fgets строку с размером куска, далее обычный fread c размером куска, полученным с помощью fgets и тд до нуля |
vadimiron
Цитата:
Код:
HTTP/1.1 200 OK если так -> значит после:) Цитата:
очень интересно посмотреть на рабочий пример |
vadimiron ну как там с примером?..
|
Возможно следует обратить внимание на RFC 2616 Hypertext Transfer Protocol -- HTTP/1.1
Код:
Chunked-Body = *chunk |
archy уже обратили внимание, работающий пример по алгоритму, есть те у кого получится или получился? :clapping:
интересно на php perl или #asp |
Время: 16:24. |
Время: 16:24.
© OSzone.net 2001-