Зависают удаленные запросы | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Здравствуйте!
В цикле посылаю запросы XMLHTTP.Open("GET","https://.... но иногда, примерно раз на 1000 успешных, ответа нет и цикл останавливается на этом месте. Как сделать, чтобы тогда этот запрос игнорировался и цикл продолжался дальше? |
Re: Зависают удаленные запросы | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Встает выполнение именно на строке XMLHTTP.Open("GET",... ?
Стоит на этой строке бесконечно? Полный код цикла какой? Да, вспомнил. Еще есть 2 способа применения обьекта - .Reset, и создание обьекта XMLHTTP заново. Можно поэкспериментировать... Исправлено 1 раз(а). Последнее : of63, 19.10.17 09:26 |
Re: Зависают удаленные запросы | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
встает на операторе XMLHTTP.send, но не всегда. Бывает выполняется весь цикл полностью.
полный текст такой scan XMLHTTP = CREATEOBJECT("Msxml2.XMLHTTP") XMLHTTP.Open("GET","https://"..., .F.) XMLHTTP.send if XMLHTTP.statustext = "OK" ADOStream = CreateObject("ADODB.Stream") ADOStream.type = 1 ADOStream.Open ADOStream.Write(XMLHTTP.responseBody) ADOStream.SaveToFile(LCLOCALFILE, 2) ADOStream.Close ADOStream = NULL else ? 'Не удалось загрузить файл с сайта !' ? XMLHTTP.statustext endif XMLHTTP = NULL dele file (LCLOCALFILE) endscan |
Re: Зависают удаленные запросы | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Надо как-то по таймеру по какому то событию программу с этим циклом прерывать и перезапускать заново с того места, где остановилось.
|
Re: Зависают удаленные запросы | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
* Кстати, в Open() есть еще параметры:
* [3] - [1,T] - асинхронный запрос (см. .readyState), 0,F - синхронный запрос (ожидаем ответ сервера бесконечно) * [4,5] - userName, password - данные для HTTP-авторизации Причина в XMLHTTP.Open("GET","https://"..., .F.) Используй асинхронный запрос: (3)=.T. В этом случае придется опрашивать на предмет "завершено" самостоятельно, также таймаут отслеживать. Примерно так:
|
Re: Зависают удаленные запросы | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
а куда сам запрос? и DOEVENS пишут надо со скобками
так? XMLHTTP = createobject("Msxml2.XMLHTTP") m.T = datetime() do while !m.OXMLHTTP.READYSTATE=4 doevents() XMLHTTP.open("GET","https://", .t.) XMLHTTP.send =SLEEP(100) if datetime()-m.T>200 exit endif enddo if !(XMLHTTP.STATUSTEXT = "OK") |
Re: Зависают удаленные запросы | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Кстати, зачем ADOStream = CreateObject("ADODB.Stream") ? В фоксе есть работа с файлами, FCREATE, FOPEN, STRTOFILE ... |
Re: Зависают удаленные запросы | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Выше - с указанием асинхронности работы. ДО начала цикла. Кто пишет? Глупости это. Открой хелп и убедись сам. Это команда а не функция, и там даже явно написано что её нельзя писать с использованием скобок Нет, конечно. Вдумчиво перечитай что Олег написал (благо он уже и полный пример сделал). Пойми логику такого варианта использования асинхронного запроса... ------------------ WBR, Igor |
Re: Зависают удаленные запросы | |
---|---|
AntonV Автор Сообщений: 50 Откуда: Верхняя Пышма Дата регистрации: 06.01.2014 |
Да, получается не ждется бесконечно ответ, а по факту - есть ответ, хорошо, нет - ждем 20 секунд и следующий запрос. Запустил цикл, пока не виснет. Спасибо, что подсказали.
|
© 2000-2024 Fox Club  |