Что нового

Обработка ошибок при получении html - кода.

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Всем добрый день.
Скачиваю страничку следующим образом:
Код:
$sURL = "http://www.admuncher.com/"
$sPath = @ScriptDir & "\HTML.html"
FileWrite($sPath, _GetHTML($sURL))


Func _GetHTML($sURL, $sSendParam = "")
	Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
	$oHTTP.Open("GET", $sURL, False)
	$oHTTP.SetRequestHeader("Content-Type", "text/html")
	$oHTTP.SetRequestHeader("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/msword, */*")
	$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)")
	$oHTTP.SetRequestHeader("Host", "www.admuncher.com")
	$oHTTP.SetRequestHeader("Accept-Language", "ru")
	$oHTTP.Send($sSendParam)
	Return $oHTTP.ResponseText
EndFunc   ;==>_GetHTML


В 99% все прекрасно скачивается. Но если сайт недоступен, то вылазит ошибка, скрипт вылетает и SciTE пишет следующее:
Код:
: ==> The requested action with this object has failed.:
$oHTTP.Send($sSendParam)
$oHTTP.Send($sSendParam)^ ERROR
->10:30:43 AutoIT3.exe ended.rc:1
+>10:30:45 AutoIt3Wrapper Finished
>Exit code: 1    Time: 2.386


Помогите, пожалуйста, получить эту ошибку для обработки, у меня никак не получается.
Спасибо.

PS
Результат с ошибкой можно получить запустив скрипт при отключенном интернете.
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
madmasles
Я думаю, проще скачивать файл из интернета с помощью InetGet...

Код:
; НАЧАЛО

 $ADR="http://www.admuncher.com/"
 [email protected]&"\html.html"
 $INET=InetGet($ADR,$FILE,1,1)
 Do
  Sleep(250)
 Until InetGetInfo($INET,2)
 $RES=InetGetInfo($INET)
 MsgBox(0,"Результат загрузки",$RES[3])
 InetClose($RES)

; КОНЕЦ
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
snoitaleR,
Большое спасибо. Ваш код отлично работает и дает возможность обработать ошибку.

Тем не менее, вопрос остается. Как получить ошибку именно из моего кода?
 

snoitaleR

AutoIT Гуру
Сообщения
854
Репутация
223
madmasles
Пример с оффсайта...
Может, подойдет...

Код:
FUNC GETHTML($URLINPUT)
$OHTTP=OBJCREATE("winhttp.winhttprequest.5.1")
$OHTTP.Open("GET",$URLINPUT)
$OHTTP.Send()
if @error Then
    msgbox(64, "Cannot connect","Cannot Connect." & " or socket died!")

Else
$HTMLSOURCE=$OHTTP.Responsetext
RETURN $HTMLSOURCE
EndIf
ENDFUNC
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 711
"Дубовый" способ, но работает.

Код:
;$sURL = "http://www.admuncher.com/"
$sURL = "http://www.?????????.com/"
$sPath = @ScriptDir & "\HTML.html"
FileWrite($sPath, _GetHTML($sURL))

Func _GetHTML($sURL, $sSendParam = "")
	Local $oHTTP = ObjCreate("WinHttp.WinHttpRequest.5.1")
	$oHTTP.Open("GET", $sURL, 0)
	$oHTTP.SetRequestHeader("Content-Type", "text/html")
	$oHTTP.SetRequestHeader("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, application/vnd.ms-excel, application/msword, */*")
	$oHTTP.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)")
	$oHTTP.SetRequestHeader("Host", "www.admuncher.com")
	$oHTTP.SetRequestHeader("Accept-Language", "ru")
	Execute('$oHTTP.Send($sSendParam)')
	If (@error) Or ($oHTTP.Status <> 200) Then
		MsgBox(0, '', 'Error!')
		Return SetError(1, 0, '')
	Else
		Return $oHTTP.ResponseText
	EndIf
EndFunc   ;==>_GetHTML
 
Автор
madmasles

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
snoitaleR,
Спасибо, но...
Увы, пример с оф. сайта не работает у меня. Я примерно так и пробовал, прежде чем задать вопрос на форуме.

Yashied,
Большое спасибо, Ваш код прекрасно отрабатывает.
Только почему он
"Дубовый" способ...
, если он отрабатывает и, что для меня важно, возвращает ошибку?
 

dimontag

Новичок
Сообщения
22
Репутация
0
Меня тоже мучил одно время этот вопрос, никак не получалось обработать эту ошибку. Этот способ еще не пробовал, но верю что поможет.
К автору вопрос.
Какое назначение и 3 параметра в функции
Код:
$oHTTP.Open("GET", $sURL, False)

Я его не указываю... но хотелось бы знать на что он влияет
 
Верх