Генерация исключения(Throw) — полезна, если Вы не знаете, в каком логическом окружении будет работать текущий участок кода, но Вы определённо знаете, что именно этот участок, требует определённого поведения для корректной работы. Как раз это и описано в реализации WinHttpRequest. В какой-то части кода предусмотрено получение ответа от сервера. Ответ не может быть ожидаем бесконечно, поэтому ожидается его получение согласно настройкам таймаутов и если в течение этого времени ответ не приходит, вызванный метод не может вернуть ожидаемый результат, в следствии чего, его код генерирует такое исключение, описывая само событие чтобы разработчик, использующий этот сторонний код, мог адекватно реагировать на ситуацию.
Сам метод вызываете Вы, из своего кода, значит вместо возвращаемого результата код получает сгенерированное вызванным методом исключение. Помимо этой ошибки, есть и другие. Например, когда соединение было внезапно потеряно, или возвращённый от сервера результат оказался нераспознанным. В каждом таком случае можно совершить ряд действий для продолжения работы программы перехватив исключение и получив информацию о том, что же его вызвало. Например, попытаться вновь совершить запрос, или обратиться к другому, запасному серверу за подобной информацией...
В Вашем случае, чтобы бесконечно ломиться на сервер в ожидании ответа, должно быть как-то так:
if (!(result := Get("http://forum.script-coding.com").error)
MsgBox % result
else
MsgBox % "Статус запроса = " result.error "`n" result.req
Get(url) {
oHTTP := ComObjCreate("WinHttp.WinHttpRequest.5.1")
Try {
oHTTP.Open("GET", url, false)
oHTTP.Send()
oHTTP.WaitForResponse()
} Catch e {
; 0x80072F78 Сервер вернул недопустимый или нераспознанный ответ
; 0x80072EE2 Время ожидания операции истекло
; 0x80072EFE Соединение с сервером было неожиданно прервано
OutputDebug % e.Message
Return Get(url)
} Return oHTTP.Status == 200 ? oHTTP.ResponseText : {"error": oHTTP.Status, "req": oHTTP.ResponseText}
}
И для отладки не особенно-сложных сценариев, используйте OutputDebug совместно с DebugVew. Это существенно упростит логгирование процесса без необходимости создания файла.