Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

WinInet. Узнать размер контента, принимаемого по http/https [D6, Win95/98, WinME, Win2k, WinXP]


SergP. ©   (2005-11-28 10:32:00) 

Нужно узнать размер контента, до закачки самого контента, для отображения процесса закачки.
Как можно это сделать...

Использую код, основаный на
http://delphimaster.ru/cgi-bin/forum.pl?id=1127731558&n=4


SergP   (2005-11-29 23:06:00) [1]


> А если разрыв произошел не по инициативе сервера... Сеть
> пропала и тп.


Х/З... Но вроде бы есть разница что сеть попала, что сервер корректно закрыл соединение...
Кстати например форум phpBB выдает контент странички без выдачи Content-Length


seeker   (2005-11-29 14:51:00) [2]


> Если не указан Content-Length  то вроде бы об окончании
> загрузки узнается по тому когда сервер закрывает соединение.
> ..

А если разрыв произошел не по инициативе сервера... Сеть пропала и тп.


SergP.   (2005-11-29 13:27:00) [3]


> По идее, после отправки запроса, сервер должен сначала сформировать
> страницу а потом заголовок в который вставить Content-Length
> сформированной страницы.А иначе как узнать полностью закачалась
> страница или нет.


Если не указан Content-Length  то вроде бы об окончании загрузки узнается по тому когда сервер закрывает соединение...


> isasa ©   (29.11.05 13:00) [8]


Имелось ввиду на русском языке... Ну да ладно... Попробую сам что-нить поискать...


isasa   (2005-11-29 13:00:00) [4]

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


seeker   (2005-11-29 12:51:00) [5]


> Почему? Если страничка динамическая (php, perl и т.п.),
> то очень часто Content-Length отсутствует, так как его просто
> невозможно посчитать наперед.

По идее, после отправки запроса, сервер должен сначала сформировать страницу а потом заголовок в который вставить Content-Length сформированной страницы.А иначе как узнать полностью закачалась страница или нет.


SergP   (2005-11-28 22:02:00) [6]


> (хотя я ни разу  не видел чтоб его небыло).


Почему? Если страничка динамическая (php, perl и т.п.), то очень часто Content-Length отсутствует, так как его просто невозможно посчитать наперед. Единственное - это складировать куски контента в буфер а уже в конце посчитать размер, выдать заголовки, а потом и сам контент. Но так далеко не все делают....


> HttpQueryInfo(FRequest, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
>  @ContentSize, dwBufLen, dwIndex )


Спасибо.
Вопрос еще есть: где можно найти нормальную справку по функциям WININET? А то чувствую, что вопросы по параметрам этой функции появятся.


seeker   (2005-11-28 19:41:00) [7]

Нет разницы HTTP или HTTPS.Если Content-Length есть значит он есть(хотя я ни разу  не видел чтоб его небыло).
Сразу после HttpSendRequest можно читать заголовки...

HttpQueryInfo(FRequest, HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER, @ContentSize, dwBufLen, dwIndex )


SergP.   (2005-11-28 17:14:00) [8]


> atruhin ©   (28.11.05 14:56) [3]
> В общем случае никак. Чаще всего для страниц сервер передает
> Content-Length, но это небязательно. Для рисунков вроде
> передает всегда. Еще есть потоковое кодирование, там не
> узнаешь. Это для HHTP, с HTTPS не работал


Ну понятно что узнать можно только если сервер передает Content-Length, именно этот случай меня и интересует. Но также интересует случай с https. Просто я не знаю его особенности, и можно ли там узнать размер контента, и может ли сервер его передавать в случае https?


> isasa ©   (28.11.05 11:02) [1]


Спасибо. Попробую...


atruhin   (2005-11-28 14:56:00) [9]

В общем случае никак. Чаще всего для страниц сервер передает Content-Length, но это небязательно. Для рисунков вроде передает всегда. Еще есть потоковое кодирование, там не узнаешь. Это для HHTP, с HTTPS не работал


Anatoly Podgoretsky   (2005-11-28 11:22:00) [10]

К тому же не обязательный, поэтому и функция называется InternetQueryData Available


isasa   (2005-11-28 11:02:00) [11]

Попробуй так

 HttpSendRequest(hHTTP, nil, 0, nil, 0);
 ...
 if InternetQueryDataAvailable(hHTTP, BytesAvail, 0, 0) then ...

хотя это, кажется только HTML-код, приходящей страницы. Рисунки ..., естественно, отдельно :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо