- Код: Выделить всё
dim WithEvents wh as WinHttp.WinHttpRequest
dim Body as string, req as Boolean
...
req = False
wh.Open "GET","http://www.google.ru",true
wh.send
'Жду ответа
Do While Not req
DoEvents
Loop
if instr(Body, тут_то_что_я_ищу)>0 then
msgbox "Нашли"
end if
...
Ответ получаю асинхронно, в событиии OnResponseFinished
- Код: Выделить всё
...
Private Sub wh_OnResponseFinished()
if wh.status = 200 then
Body = StrConv(wh.ResponseBody, vbUnicode)
req = True
end if
End Sub
...
По коду - если я нахожу слово в ответе, то вывожу MsgBox. Так вот - это слово всегда есть в ответе, но не всегда его находит. Задумался почему так происходит и обнаружил, что в Body не всегда содержится ответ полностью, а буквально через секунду он там уже полностью загружен, т.е.
- Код: Выделить всё
...
Private Sub wh_OnResponseFinished()
dim s as string
if wh.status = 200 then
s = StrConv(wh.ResponseBody, vbUnicode)
sleep 1000
Body = StrConv(wh.ResponseBody, vbUnicode)
req = True
end if
End Sub
...
В переменной s сохраняется недозагруженный ответ, а в Body ответ полностью. Надо отметить что так происходит не всегда, а в редких случаях. (ОС Windows Vista Home Premium 32Bit с последними обновлениями, на других ОС не пробовал). Никак не могу понять почему так происходит, и как решают данную проблему. Может кто знает?