Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.022 c
15-1140440306
tytus
2006-02-20 15:58
2006.03.12
Как в екселе писать дату как текст?


15-1139842073
Хинт
2006-02-13 17:47
2006.03.12
Программа для сравнения файлов


2-1141008211
Adios
2006-02-27 05:43
2006.03.12
BitButon


2-1140412396
Bratskiy
2006-02-20 08:13
2006.03.12
Выравнивание по ширине строки


8-1128180544
alsov
2005-10-01 19:29
2006.03.12
Как программно сделать mute





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский