Что нового

Не работает проверка на перенаправления (выдается ошибка)

avtoIT

Новичок
Сообщения
94
Репутация
0
Код:
$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Option(6) = False ;WinHttpRequestOption_EnableRedirects
$oHTTP.Open("GET", "http://creator-lab.ucoz.ru/load/0-0-1-52-20")
$oHTTP.Send()
$oHTTP.WaitForResponse
$sNewLocation = $oHTTP.GetResponseHeader("Location")
ConsoleWrite($sNewLocation & @LF)

Взял этот код из НЕофициального Faq. Все отлично работало, но после того, как я переустановил Autoit, выдается вот такая ошибка (скриншот).
aiCDq.jpg


Из-за чего могла возникнуть эта проблема?
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Да. Я тоже давно заметил такую ошибку и решения так и не нашёл, кроме как поставить AutoIt 3.3.12.0 (или ниже).
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Добавьте вот эту строку в самое начала скрипта:
Код:
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

А в самый конец вот это:
Код:
Func _ErrFunc($oError)
    ; Do anything here.
    ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
            @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
            @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
            @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
            @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
            @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
            @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
            @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
            @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
            @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
EndFunc   ;==>_ErrFunc

Запустите ваш код, и покажете что выведет в консоль.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
AutoIt v3 Script.au3 (8) : ==> COM Error intercepted !
err.number is: 0x80020009
err.windescription: Ошибка.

err.description is: Запрашиваемый заголовок не найден

err.source is: WinHttp.WinHttpRequest
err.helpfile is:
err.helpcontext is: 0
err.lastdllerror is: 0
err.scriptline is: 8
err.retcode is: 0x80072F76

 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Вам нужно в опция выключить авторедирект. не заметил что выключен
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
Ммм... можете расписать где это.
Спасибо.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
А что покажет это?
Код:
MsgBox(0,'Авторедирект',$oHTTP.Option(6))
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Ну все правильно показывает. А посмотрите что в
Код:
ConsoleWrite($oHTTP.GetAllResponseHeaders() & @LF)
 

veretragna

Как писал, так и работает.
Сообщения
140
Репутация
10
OffTopic:

Кстати, в последней AutoIt (3.3.14.0) реально что-то в объектах поломалось. То же сообщение (The requested action with object has failed) наблюдал при обращении к объектам DOM при использовании IE, ошибки бессистемные и возникают внезапно. Откатился обратно до версии 3.3.12.0 и все заработало по нормальному.
 
Автор
A

avtoIT

Новичок
Сообщения
94
Репутация
0
Connection: Keep-Alive
Date: Sun, 13 Sep 2015 19:16:15 GMT
Keep-Alive: timeout=2, max=100
Content-Length: 11107
Content-Type: text/html; charset=utf-8
Server: Apache
X-Powered-By: PHP/5.5.26

Самое смешное, что если все же оставить
Код:
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

То на первый взгляд, все работает верно, т.е. ошибку он уже не выдает и пишет какая ссылка в редиректе...


Код:
Global $oErrorHandler = ObjEvent("AutoIt.Error", "_ErrFunc")

$oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
$oHTTP.Option(6) = False ;WinHttpRequestOption_EnableRedirects
$oHTTP.Open("GET", "http://creator-lab.ucoz.ru/load/0-0-1-52-20")

$oHTTP.Send()
$oHTTP.WaitForResponse
$sNewLocation = $oHTTP.GetResponseHeader("Location")
MsgBox(0, '', $sNewLocation, 0)


Func _ErrFunc($oError)
    ; Do anything here.
EndFunc   ;==>_ErrFunc
 
Верх