Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема с закачкой HTML

10K
18 января 2009 года
yaga
12 / / 04.08.2005
Добрый день!
Моя программа закачивает HTML с некоторых сайтов для последующей обработки.
Качаю так:

CInternetSession* pInternetSession;
CString BrName="Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)";
pInternetSession = new CInternetSession(BrName);


CString strb,HTML;
strb="";
HTML="";

CStdioFile* pFile = NULL;
try
{
pFile = pInternetSession->OpenURL(link,1,INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);

try
{

while (pFile->ReadString(strb))
{
HTML=HTML+strb;
}


} //end try
catch (CFileException* e)
{
CString mes="Не удалось прочитать файл";
AfxMessageBox(mes);
return ("Error");
}
}


pFile->Close();
pInternetSession->Close();
delete buffer;
delete pInternetSession;
return HTML;
} // end try
catch (CInternetException* e)
{

CString mes="Не удалось открыть URL:";
AfxMessageBox(mes,MB_OK);
return ("Error");
}

Практически все сайты качаются без проблем, но есть пара сайтов на которых этот код скачивает несколько страниц и виснет, помагает только перезапуск программы. Причем виснет не на конкретных страницах, а случайным образом. В принципе эти сайты и в эксплорере плохо открываются. Я понимаю что это проблема конкрентных сайтов, но нехотелось бы что бы программа просто зависала. Необходио как то отловить эту ситуацию, что бы например, прервать закачку и начать заново. Как это можно сделать?
44K
21 января 2009 года
magfed
7 / / 12.01.2009
Цитата: yaga

Практически все сайты качаются без проблем, но есть пара сайтов на которых этот код скачивает несколько страниц и виснет, помагает только перезапуск программы. Причем виснет не на конкретных страницах, а случайным образом. В принципе эти сайты и в эксплорере плохо открываются.



А можно привести адреса этих сайтов? Ну, чтобы попробовать.

Цитата: yaga
но нехотелось бы что бы программа просто зависала. Необходио как то отловить эту ситуацию, что бы например, прервать закачку и начать заново. Как это можно сделать?



Ну, может помочь такая идея. Можно запускать код для скачивания HTML-страниц в новом потоке, при этом основной поток должен проверять время скачивания, и если оно превышает некоторое значение (timeout, задаете сами) убивать порожденный поток, ну и, например, предлагать закачать страницу заново.

P.S. В MSDN для функции ReadString() есть такое замечание:

Цитата:
Reading is stopped by the first newline character.


При этом, если страница оптимизирована каким-то HTML-оптимизатором, там вообще может не быть символов завершения строки. Может в этом пооблема?

92
21 января 2009 года
Тень Пса
2.2K / / 19.10.2006
есть timeout'ы для таких целей. Прерывать операцию по истечению промежутка времени.

ну и Callback функции, для WinInet.

всё это описано в MSDN
10K
26 января 2009 года
yaga
12 / / 04.08.2005
Спасибо за ваши советы.
После долгих эксперементов выяснилось, что таймоуты не помогают, программа все равно виснит.
Еще выяснилось что это происходит только у меня дома. На работе и у моих друзей программа качает безупречно. Впрочем, и на домашнем компьютере ночью качает нормально. Вообщем, грешу на провайдера.
В любом случае, такое поведение программы считаю неправильным, поэтому сдела как советовал magfed.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог