Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.058 c
15-1140438952
Cosinus
2006-02-20 15:35
2006.03.12
Windows Host Script и загрузка процессора.


1-1139388998
Дмитрий_Б
2006-02-08 11:56
2006.03.12
Текст в QR под углом 90 градусов


1-1138785708
Kolan
2006-02-01 12:21
2006.03.12
Байт стаффинг. Алгоритм.


2-1140780704
Ландграф Павел
2006-02-24 14:31
2006.03.12
Получить из относительного пути абсолютный


15-1139988050
DelphiN!
2006-02-15 10:20
2006.03.12
Требуется программист на Delphi. г.Алматы. р.Казахстан