Здравствуйте, _Ramzes_, Вы писали:
_R_>Скорее как быстро скачать файл по протоколу HTTP. Разобраны только основные моменты. Ничего нет про докачку файла...
Действительно, статейка только для начального изучения WinInet. Неужели RSDN только новички читают? Тогда имело бы смысл изложить статью так:
Есть такая классная функция — URLDownloadToFile().
Новичкам можно было бы еще рассказать, что такие параметры, как сервер, порт и т.д., можно получить из URL с помощью функции InternetCrackUrl(), можно было бы еще не запутывать новичков непонятной функцией CloseURL, а написать вместо нее InternetCloseHandle(). Еще можно было бы объяснить, как скачивать файл по https, как делать запросы GET и POST, как передавать параметры в POST, как добавить свои заголовки в запрос, как самому обрабатывать cookies и редиректы, как загрузить файл на сервер и показать при этом прогресс загрузки. (Ладно, насчет последнего я пожалуй загнул.)
Здравствуйте, _GIZMO, Вы писали:
_GI>Так возьмись и напиши (на 5+
. Как новичек разобрасля почти во всем кроме — "как самому обрабатывать cookies и редиректы".
Так на это время нужно.
_GI>Или будь добр объясни мне вкратце куки WinInet сама берет из кэша IE? И с редиректами не понял никак не удается получить 302 Moved Temporarily от сервера, чего надо в (и когда) в Referer пихать.
Если вкратце, то WinInet сам обрабатывает куки и редиректы, если не установлены флаги INTERNET_FLAG_NO_COOKIES и INTERNET_FLAG_NO_AUTO_REDIRECT в HttpOpenRequest. Но иногда приходится их обрабатывать самостоятельно, например если заходишь на сайт под другим логином и не хочешь оставлять за собой куки. Из responce их можно получить через HttpQueryInfo(hRequest, HTTP_QUERY_SET_COOKIE,..), распарсить и где-нибудь в программе сохранить. EXPIRED куки нужно удалять. По хорошему их нужно хранить где-нибудь в map, но обычной строки для этого вполне хватает. Чтобы добавить куки в запрос, нужно добавить HTTP header "Cookie", примерно так:
CString header = "Cookie: " + sCookie + "\r\n";
HttpAddRequestHeaders(hRequest, header, header.GetLength(), HTTP_ADDREQ_FLAG_ADD);
Если сам обрабатываешь куки, то возможно придется обрабатывать и редиректы. Например gmail вешает куки на редиректах. Тут нет ничего хитрого. Ставим флаг INTERNET_FLAG_NO_AUTO_REDIRECT, получаем код ответа через HttpQueryInfo(hRequest, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER,..). Если это редирект (коды 300-399), то получаем новый URL через HttpQueryInfo(hRequest, HTTP_QUERY_LOCATION,..) и переходим на него, заменив Referer на текущий адрес.
Если флаг INTERNET_FLAG_NO_AUTO_REDIRECT не стоит, то 302 от сервера не получишь, WinInet сам его обработает.
Здравствуйте, Виноградов С.В., Вы писали:
ВСВ>Статья:
ВСВ>WinINet: как правильно скачать файл по протоколу HTTPАвтор(ы): Виноградов С.В. (FDSC)
Дата: 26.09.2006
Статья призвана исправить небольшие упущения, допущенные в уже существующих на RSDN статьях, и облегчить начальное изучение WinInet и во многом дублирует уже существующие.
Скорее как быстро скачать файл по протоколу HTTP. Разобраны только основные моменты. Ничего нет про докачку файла...
Эх, кто бы про асинхронные операции в WinInet написал статью... Но как бы там ни было на твердую четверку тянет.
Здравствуйте, _Ramzes_, Вы писали:
_R_>Эх, кто бы про асинхронные операции в WinInet написал статью...
Тогда уж лучше в WinHTTP
Здравствуйте, _Ramzes_, Вы писали:
_R_>Здравствуйте, Виноградов С.В., Вы писали:
ВСВ>>Статья:
ВСВ>>WinINet: как правильно скачать файл по протоколу HTTPАвтор(ы): Виноградов С.В. (FDSC)
Дата: 26.09.2006
Статья призвана исправить небольшие упущения, допущенные в уже существующих на RSDN статьях, и облегчить начальное изучение WinInet и во многом дублирует уже существующие.
_R_>Скорее как быстро скачать файл по протоколу HTTP. Разобраны только основные моменты. Ничего нет про докачку файла...
_R_>Эх, кто бы про асинхронные операции в WinInet написал статью... Но как бы там ни было на твердую четверку тянет.
Ну, на 4 не тянет. Я просто исправил кое-что: а так всё уже есть в других статьях, там только неправильно записан цикл закачки.
Сам думал про асинхронные операции, да вот времени не хватило.
Список типов теперь находится в другом месте:
http://www.iana.org/assignments/media-types/
Здравствуйте, Аноним, Вы писали:
А>Список типов теперь находится в другом месте:
А>http://www.iana.org/assignments/media-types/
Когда я писал статью, ссылка из статьи ещё работала. Спасибо за замечание.
Здравствуйте, algol, Вы писали:
A>Новичкам можно было бы еще рассказать, что такие параметры, как сервер, порт и т.д., можно получить из URL с помощью функции InternetCrackUrl(), можно было бы еще не запутывать новичков непонятной функцией CloseURL, а написать вместо нее InternetCloseHandle(). Еще можно было бы объяснить, как скачивать файл по https, как делать запросы GET и POST, как передавать параметры в POST, как добавить свои заголовки в запрос, как самому обрабатывать cookies и редиректы, как загрузить файл на сервер и показать при этом прогресс загрузки. (Ладно, насчет последнего я пожалуй загнул.)
Так возьмись и напиши (на 5+

. Как новичек разобрасля почти во всем кроме — "как самому обрабатывать cookies и редиректы".
Или будь добр объясни мне вкратце куки WinInet сама берет из кэша IE? И с редиректами не понял никак не удается получить 302 Moved Temporarily от сервера, чего надо в (и когда) в Referer пихать.