Форум: "Сети";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизWinInet. Узнать размер контента, принимаемого по http/https Найти похожие ветки
← →
SergP. (2005-11-28 10:32) [0]Нужно узнать размер контента, до закачки самого контента, для отображения процесса закачки.
Как можно это сделать...
Использую код, основаный на
http://delphimaster.net/view/6-1127731558/
← →
isasa © (2005-11-28 11:02) [1]Попробуй так
HttpSendRequest(hHTTP, nil, 0, nil, 0);
...
if InternetQueryDataAvailable(hHTTP, BytesAvail, 0, 0) then ...
хотя это, кажется только HTML-код, приходящей страницы. Рисунки ..., естественно, отдельно :)
← →
Anatoly Podgoretsky © (2005-11-28 11:22) [2]К тому же не обязательный, поэтому и функция называется InternetQueryDataAvailable
← →
atruhin © (2005-11-28 14:56) [3]В общем случае никак. Чаще всего для страниц сервер передает Content-Length, но это небязательно. Для рисунков вроде передает всегда. Еще есть потоковое кодирование, там не узнаешь. Это для HHTP, с HTTPS не работал
← →
SergP. (2005-11-28 17:14) [4]
> atruhin © (28.11.05 14:56) [3]
> В общем случае никак. Чаще всего для страниц сервер передает
> Content-Length, но это небязательно. Для рисунков вроде
> передает всегда. Еще есть потоковое кодирование, там не
> узнаешь. Это для HHTP, с HTTPS не работал
Ну понятно что узнать можно только если сервер передает Content-Length, именно этот случай меня и интересует. Но также интересует случай с https. Просто я не знаю его особенности, и можно ли там узнать размер контента, и может ли сервер его передавать в случае https?
> isasa © (28.11.05 11:02) [1]
Спасибо. Попробую...
← →
seeker © (2005-11-28 19:41) [5]Нет разницы HTTP или HTTPS.Если Content-Length есть значит он есть(хотя я ни разу не видел чтоб его небыло).
Сразу после HttpSendRequest можно читать заголовки...
HttpQueryInfo(FRequest, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @ContentSize, dwBufLen, dwIndex )
← →
SergP © (2005-11-28 22:02) [6]
> (хотя я ни разу не видел чтоб его небыло).
Почему? Если страничка динамическая (php, perl и т.п.), то очень часто Content-Length отсутствует, так как его просто невозможно посчитать наперед. Единственное - это складировать куски контента в буфер а уже в конце посчитать размер, выдать заголовки, а потом и сам контент. Но так далеко не все делают....
> HttpQueryInfo(FRequest, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
> @ContentSize, dwBufLen, dwIndex )
Спасибо.
Вопрос еще есть: где можно найти нормальную справку по функциям WININET? А то чувствую, что вопросы по параметрам этой функции появятся.
← →
seeker © (2005-11-29 12:51) [7]
> Почему? Если страничка динамическая (php, perl и т.п.),
> то очень часто Content-Length отсутствует, так как его просто
> невозможно посчитать наперед.
По идее, после отправки запроса, сервер должен сначала сформировать страницу а потом заголовок в который вставить Content-Length сформированной страницы.А иначе как узнать полностью закачалась страница или нет.
← →
isasa © (2005-11-29 13:00) [8]SergP © (28.11.05 22:02) [6]
Вопрос еще есть: где можно найти нормальную справку по функциям WININET? А то чувствую, что вопросы по параметрам этой функции появятся.
MSDN на CD(DVD) или
http://search.microsoft.com/search/results.aspx?st=b&na=80&qu=InternetQueryDataAvailable&View=msdn
http://search.microsoft.com/search/results.aspx?view=msdn&st=b&na=82&qu=HttpQueryInfo
← →
SergP. (2005-11-29 13:27) [9]
> По идее, после отправки запроса, сервер должен сначала сформировать
> страницу а потом заголовок в который вставить Content-Length
> сформированной страницы.А иначе как узнать полностью закачалась
> страница или нет.
Если не указан Content-Length то вроде бы об окончании загрузки узнается по тому когда сервер закрывает соединение...
> isasa © (29.11.05 13:00) [8]
Имелось ввиду на русском языке... Ну да ладно... Попробую сам что-нить поискать...
← →
seeker © (2005-11-29 14:51) [10]
> Если не указан Content-Length то вроде бы об окончании
> загрузки узнается по тому когда сервер закрывает соединение.
> ..
А если разрыв произошел не по инициативе сервера... Сеть пропала и тп.
← →
SergP © (2005-11-29 23:06) [11]
> А если разрыв произошел не по инициативе сервера... Сеть
> пропала и тп.
Х/З... Но вроде бы есть разница что сеть попала, что сервер корректно закрыл соединение...
Кстати например форум phpBB выдает контент странички без выдачи Content-Length
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.019 c