![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| urix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: нет Всего: 1 |
Если, например интернета нет, или нет запрашиваемого файла, то программа надолго (30 секунд) задумывается при выполнении
hURL := InternetOpenURL(hSession,PChar(fileURL),nil,0,Flags,0); Как БЕЗ ДЛИТЕЛЬНОЙ ЗАДЕРЖКИ проверить, есть ли доступ к нужному файлу? -------------------------------- InternetGetConnectedState с параметром INTERNET_CONNECTION_OFFLINE не помогает, если например интернет через VPN, и отключен. То же самое и InternetQueryOption с параметром INTERNET_OPTION_CONNECTED_STATE. -------------------------------- InternetCheckConnection(pchar(fileURL),FLAG_ICC_FORCE_CONNECTION,0) тоже задумывается на 30 секунд. -------------------------------- InternetCheckConnection(pchar(fileURL),0,0) вообще всегда возвращает false. -------------------------------- пробовал так: InternetSetOption(hSession,INTERNET_OPTION_RECEIVE_TIMEOUT... InternetSetOption(hSession,INTERNET_OPTION_SEND_TIMEOUT... InternetSetOption(hSession,INTERNET_OPTION_CONNECT_TIMEOUT... но тоже не помогает. |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
1. Перенести файл на другой хостинг - который отвечает на пинги. 2. Использовать другие способы доступа (Indy, WinSocks, etc.) 3. Запустить InternetOpenURL в отдельном потоке, который сообщит основному по мере появления результатов, не мешая работе программы. |
|||
|
||||
| urix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: нет Всего: 1 |
Snowy
1. Пинги хостов работают нормально. Адреса с которых качаются файлы я не могу выбирать. То есть если файл есть - он качается без проблем, а если нет, то прога задумывается. 2. посмотрю 3. Файлов иногда приходится качать много, один за другим, так что вариант с отдельным потоком для проверки не подходит. И ещё, проблема наверное разделяется на две: 1. Сеть есть, а интернета нет 2. Интернет есть, но нужного файла по заданному url нет. Кстати, в описании InternetCheckConnection написано что пингуется именно хост. То есть наличие конкретного файла так не узнать. Вероятно, надо сделать какой-то TIMEOUT меньше - но какой? |
|||
|
||||
| Snowy |
|
||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Нет, легко решается простым приемом - просто проверяем наличие урла, который гарантировано существует. (типа гугль).
Просто выстраиваешь список из урлов на закачку. Можешь качать в несколько потоков или в один. Закачал - берем следующий по списку.
Ну да, ну да. Пинг тут не поможет. Видимо винда несколько раз подряд пинговать пытается для надежности. Честно говоря, не знаю, как это можно победить... На Indy этот вопрос решается легко, но там встает проблема с настройками прокси. Их нужно у пользователя спрашивать. Добавлено @ 17:12
По идее, задумываться должно при отсутствии коннекта, а не файла. При отсутствии файла должно бодренько рапортовать 404. |
||||||||
|
|||||||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
А чё отступился? В правильном направлении копал .... Если покажешь что получилось в этом направлени может совмесными усилиями отыщем ошибку. |
|||
|
||||
| urix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: нет Всего: 1 |
Перед выполнением InternetOpenURL,
запрашиваю значения InternetSetOption(hSession,INTERNET_OPTION_RECEIVE_TIMEOUT... InternetSetOption(hSession,INTERNET_OPTION_SEND_TIMEOUT... InternetSetOption(hSession,INTERNET_OPTION_CONNECT_TIMEOUT... и ставлю новые, например в 30 раз меньше. В конце возвращаю всё на место. Разницы я не заметил. Первоначальные значения возвращались такие: INTERNET_OPTION_CONNECT_TIMEOUT=300000 INTERNET_OPTION_RECEIVE_TIMEOUT=не помню точно сколько нулей, но больше (360000...) Добавлено @ 18:26 Snowy Во многих случаях, действительно как и полагается возвращается 404, но есть исключения - в них то и проблема. |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
Я когда-то писал подобное, заного писать не буду, но если код покажешь (весь код, чтоб я смог сам протестировать), то скорее всего помогу.
|
|||
|
||||
| urix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: нет Всего: 1 |
RAdmin
Условия: Delphi7, локальная сеть активна, интернет выключен.
Добавлено @ 22:45 всё это в WinXP SP2 |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
urix Дейсвительно в заданных условиях wininet глючит.
думаю в данном случаи больше подойдёт winhttp.dll |
|||
|
||||
| urix |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 26.12.2005 Репутация: нет Всего: 1 |
RAdmin
а для него должен быть где-то хедерный файл? Это сообщение отредактировал(а) urix - 27.12.2005, 17:53 |
|||
|
||||
| RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 10 Всего: 115 |
Вот набор компонентов, в том числе и Http клиенты на основе wininet и winhttp, с исходниками и примерами, думаю это будет более полезно.
Найдёшь все что нужно для работы с winhttp. http://torry.net/vcl/internet/http/Alcinoe30619.zip PS: MSDN должен содержать описание всех функций winhttp. winhttp можно совместно использовать с wininet, но что касается работы с протоколом http то winhttp надежнее. Работать с winhttp также как и с wininet, всё почти одинаково. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |