Что нового

Winhttprequest выдает неизвестную некому ошибку

c.rauf1986

Новичок
Сообщения
14
Репутация
0
Пожалуйста помогите мне решить эту проблему.
при отправке с winhttprequest получаю ответ

что это такое как с ним пользоваться не знаю.Хотя должно получить ответ если не смог авторизоваться простая html код страницы с не авторизованным пользователем.и наобарот если смог авторизоваться то html код с личным кабинетом сайта.


Код:
#include <Process.au3>
#include <GUIConstantsEx.au3>
#include <IE.au3>

Global $oIE
Global $sHTML
Global $sUrl = 'http://www.seosprint.net'
Global $sUserAgent
Global $sReferer = "http://www.seosprint.net/index.php"
Global $InpBoxUserAgent
Global $InpBoxCookies

sLogin()

Func sLogin()

   $IeVerResult = _IeBrowserVersion() ;Функция который Получает Версия браузера

   ;============================================================================================================================
   ;====================================================Проверить ответ функции=================================================
   ;============================================================================================================================
   If $IeVerResult = -1 Then
	  $inpBox = InputBox("версия интернет браузера", "Невозможно автоматически определить версию интернет браузера" & _
	  @CRLF & "Пожалуйста укажите версию браузера" & @CRLF & "Например : internet explorer 9.0 --->9" & @CRLF & _
	  "Например : internet explorer 10.0 --->10","","",400,200)
	  If @error Then
		 MsgBox(0,'','Версия браузера не задано')
	     Return
	  ElseIf $inpBox = ""
		 MsgBox(0,'','Версия браузера не задано')
	     Return
	  Else
		 $IeVerResult = _IeBrowserVersion($inpBox)
		 If $IeVerResult = -2 Then
		    MsgBox(0,'','Версия браузера задано неправильно')
	        Return
		 EndIf
	  EndIf
   EndIf

   MsgBox(64,"","Пожалуйста Авторизуйтесь в браузере!" & @CR & "После авторизации закройте браузер")
   ;============================================================================================================================
   ;============================================================================================================================
   ;============================================================================================================================

   $sResult = _Authorization() ;Функция который собирает куки с сайта

   ;============================================================================================================================
   ;====================================================Проверить ответ функции=================================================
   ;============================================================================================================================
   If IsArray($sResult) = 0 Then
	  If $sResult = 2 Then
		 MsgBox(0,'','Страница задано не правильно')
	  ElseIf $sResult = 3 Then
		 MsgBox(0,'','Время ожидания истекло.')
	  ElseIf $sResult = 4 Then
		 MsgBox(0,'','ошибка в Браузере')
	  ElseIf $sResult = 5 Then
		 MsgBox(0,'','Браузер закрыт')
	  EndIf

	  Return
   Else
	  $sCookie = $sResult[0]
   EndIf
   ;============================================================================================================================
   ;============================================================================================================================
   ;============================================================================================================================

   $sUserAgent = _IEUserAgent() ;Функция который бирает User-Agent с (Интернет експлорер)

   ;============================================================================================================================
   ;====================================================Проверить ответ функции=================================================
   ;============================================================================================================================
   If $sUserAgent = 2 Then
	  MsgBox(0,'','Страница USER AGENT задано не правильно')
   ElseIf $sUserAgent = 3 Then
	  MsgBox(0,'','Время ожидания истекло.')
   ElseIf $sUserAgent = 4 Then
	  MsgBox(0,'','ошибка в Браузере')
   ElseIf $sUserAgent = 5 Then
	  MsgBox(0,'','ошибка в USER AGENT')
   EndIf
   If $sUserAgent = 2 Or $sUserAgent = 3 Or $sUserAgent = 4  Or $sUserAgent = 5 Then
	  Return
   EndIf
   ;============================================================================================================================
   ;============================================================================================================================
   ;============================================================================================================================

   $ResultLogin = sLoginWinHttp($sUserAgent,$sCookie) ;Функция посылает данные и получает ответ с помощью winhttprequest 5.1

   ;============================================================================================================================
   ;====================================================Проверить ответ функции=================================================
   ;============================================================================================================================

   Switch $ResultLogin[0]
      Case -1
		 MsgBox(0,'','Неизвестная ошибка')
	  Case 0
		 MsgBox(0,'','Запрос на аутентификацию составлен неверно')

		 $sUserAgent = ""
		 $sCookie = ""

		 $sHTML = $ResultLogin[1]
		 $fnameLoginPage = FileOpen(@scriptdir & "/seosprint.html",2)
		 FileWrite($fnameLoginPage,$sHTML)
		 FileClose($fnameLoginPage)
	  Case 1
		 $sHTML = $ResultLogin[1]
		 $fnameLoginPage = FileOpen(@scriptdir & "/seosprint.html",2)
		 FileWrite($fnameLoginPage,$sHTML)
		 FileClose($fnameLoginPage)
		 If StringInStr($sHTML,"Мой баланс") Then
			MsgBox(0,'','Авторизация прошла успешно')
			Sleep(250)
		 Else
		    MsgBox(0,'','Запрос на аутентификацию составлен неверно')

		    $sUserAgent = ""
		    $sCookie = ""

		    $sHTML = $ResultLogin[1]
			$fnameLoginPage = FileOpen(@scriptdir & "/seosprint.html",2)
			FileWrite($fnameLoginPage,$sHTML)
			FileClose($fnameLoginPage)
		 EndIf
   EndSwitch
EndFunc

Func _Authorization() ;Функция который собирает куки с сайта

   ;2 ~~ "Site page is not defined"
   ;3 ~~ "TimeOut"
   ;4 ~~ "Object is not defined"
   ;5 ~~ "Browser closed by user"

   ;$sResult[0] -- "Cookies"
   ;$sResult[1] -- "Referer"

   Local $sResult[2]

   $oIE = 0
   $oIE = ObjCreate("Shell.Explorer.2")
   $IE_Form = GUICreate("Web control", @DesktopWidth - @DesktopWidth * 0.2, @DesktopHeight - @DesktopHeight * 0.2, @DesktopWidth * 0.1, @DesktopHeight * 0.075)
   GUICtrlCreateObj($oIE, @DesktopWidth * 0.01, @DesktopWidth * 0.01, (@DesktopWidth - @DesktopWidth * 0.2) - (@DesktopWidth * 0.02),(@DesktopHeight - @DesktopHeight * 0.2) - (@DesktopWidth * 0.02))

   GUISetState(@SW_SHOW,$IE_Form) ;Show GUI

   $IEnav = IENavigateUrl($oIE,$sUrl,$IE_Form)

   If $IEnav = 2 Then
      GUIDelete($IE_Form)
	  Return 4
   ElseIf $IEnav = 3 Then
      GUIDelete($IE_Form)
	  Return 2
   ElseIf $IEnav = 4 Then
	  $MsgBoxStatus = MsgBox(4,"","Время ожидания истекло" & @CRLF & "Продолжить ?")
	  If $MsgBoxStatus = 7 Then ;No
         GUIDelete($IE_Form)
         Return 3
	  EndIf
   ElseIf $IEnav = 5 Then
	  GUIDelete($IE_Form)
	  Return 5
   EndIf

   $oDoc = _IEDocGetObj($oIE)

   While 1
	  $nMsgLogin = GUIGetMsg($IE_Form)
	  If $nMsgLogin = $GUI_EVENT_CLOSE Then
		 $sResult[0] = $oDoc.cookie
		 $sResult[1] = $oDoc.location.href
		 ExitLoop
	  EndIf
   WEnd

   GUIDelete($IE_Form)

   Return $sResult
EndFunc

Func _IEUserAgent() ;Функция который бирает User-Agent с (Интернет експлорер)

   ;2 ~~ "Site page is not defined"
   ;3 ~~ "TimeOut"
   ;4 ~~ "Object is not defined"
   ;5 ~~ "User-Agent not found"

   $oIE = 0
   $oIE = ObjCreate("Shell.Explorer.2")
   $IE_Form = GUICreate("Web control", @DesktopWidth - @DesktopWidth * 0.2, @DesktopHeight - @DesktopHeight * 0.2, @DesktopWidth * 0.1, @DesktopHeight * 0.075)
   GUICtrlCreateObj($oIE, @DesktopWidth * 0.01, @DesktopWidth * 0.01, (@DesktopWidth - @DesktopWidth * 0.2) - (@DesktopWidth * 0.02),(@DesktopHeight - @DesktopHeight * 0.2) - (@DesktopWidth * 0.02))

   GUISetState(@SW_SHOW,$IE_Form) ;SHOW GUI

   $IEnav = IENavigateUrl($oIE,"http://www.whoishostingthis.com/tools/user-agent/")

   If $IEnav = 2 Then
      GUIDelete($IE_Form)
	  Return 4
   ElseIf $IEnav = 3 Then
      GUIDelete($IE_Form)
	  Return 2
   ElseIf $IEnav = 4 Then
	  $MsgBoxStatus = MsgBox(4,"","Время ожидания истекло" & @CRLF & "Продолжить ?")
	  If $MsgBoxStatus = 7 Then ;No
         GUIDelete($IE_Form)
         Return 3
	  EndIf
   EndIf

   $oDoc = _IEDocGetObj($oIE)
   $sHtml = $oDoc.body.innerHTML

   $UserAgent = StringRegExp($sHtml,'"info-box user-agent">(.*?)<',3)
   If @error Then
      GUIDelete($IE_Form)
	  Return 5
   EndIf

   GUIDelete($IE_Form)

   Return $UserAgent[0]

EndFunc

Func sLoginWinHttp($sUserAgent,$sCookie) ;Функция посылает данные и получает ответ с помощью winhttprequest 5.1

   ;Return -1 "Неизвестная ошибка"
   ;Return 0 "Error"
   ;Return 1 "OK"

   Local $result[2]

   If $sUserAgent = "" Or $sCookie = "" Then
	  $result[0] = -1
	  $result[1] = 0
	  Return $result
   EndIf

   Global $oHTTP = ObjCreate('WinHttp.WinHttpRequest.5.1')

   ;******************************************************
   $oHTTP.Open("GET", $sUrl & "/index.php", true)
   $oHTTP.SetRequestHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
   $oHTTP.SetRequestHeader("Referer", "http://www.seosprint.net/index.php")
   $oHTTP.SetRequestHeader("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4,az;q=0.2,tr;q=0.2")
   $oHTTP.SetRequestHeader("User-Agent", $sUserAgent)
   $oHTTP.SetRequestHeader("Accept-Encoding", "gzip, deflate")
   $oHTTP.SetRequestHeader("Host", "www.seosprint.net")
   $oHTTP.SetRequestHeader("Connection", "Keep-Alive")
   $oHTTP.SetRequestHeader("Cookie", $sCookie)
   $oHTTP.Send()
   $oHTTP.WaitForResponse()
   ;******************************************************
   If $oHTTP.Status = 200 Then
	  $sHTML = $oHTTP.ResponseText()
	  If StringInStr($sHTML,"Мой баланс") Then
		 $ResponseText = $oHTTP.ResponseText()
		 $result[0] = 1
		 $result[1] = $ResponseText
	     Return $result
	  Else
		 $ResponseText = $oHTTP.ResponseText()
		 $result[0] = 0
		 $result[1] = $ResponseText
	     Return $result
	  EndIf
   EndIf

   $result[0] = -1
   $result[1] = 0

   Return $result

EndFunc

Func _IeBrowserVersion($IeVersion = "") ;Функция который Получает Версия браузера

   ;Return -1 "Невозможно определить версию Интернет Браузера"
   ;Return -2 "Неправильно заданы параметры интернет Браузера"

   Local $regValue

   If $IeVersion = "" Then
	  Local $sVersion = FileGetVersion("C:\Program Files\Internet Explorer\iexplore.exe")
	  If @error Then
		 Return -1
	  EndIf
	  $IEver = StringRegExp($sVersion,"^(.*?)\.",3)
	  If @error Then
		 Return -1
	  EndIf

	  If $IEver[0] = 11 Then
		 $regValue = "0x2AF8"
	  ElseIf $IEver[0] = 10 Then
		 $regValue = "0x2710"
	  ElseIf $IEver[0] = 9 Then
		 $regValue = "0x2328"
	  ElseIf $IEver[0] = 8 Then
		 $regValue = "0x1F40"
	  ElseIf $IEver[0] = 7 Then
		 $regValue = "0x1B58"
	  Else
		 Return -1
	  EndIf
   Else
	  If $IeVersion = 11 Then
		 $regValue = "0x2AF8"
	  ElseIf $IeVersion = 10 Then
		 $regValue = "0x2710"
	  ElseIf $IeVersion = 9 Then
		 $regValue = "0x2328"
	  ElseIf $IeVersion = 8 Then
		 $regValue = "0x1F40"
	  ElseIf $IeVersion = 7 Then
		 $regValue = "0x1B58"
	  Else
		 Return -2
	  EndIf
   EndIf

   RegRead("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID))
   If @error Then
	  RegWrite("HKEY_CURRENT_USER\SOFTWARE\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID), "REG_DWORD", $regValue)
   EndIf
   RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID))
   If @error Then
	  RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Main\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID), "REG_DWORD", $regValue)
   EndIf
   RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID))
   If @error Then
	  RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION", _ProcessGetName(@AutoItPID), "REG_DWORD", $regValue)
   EndIf

EndFunc

Func IENavigateUrl($IEObject,$sUrl,$GuiWindow = 0,$TimeOutSecond = 60) ;Функция навигейт в браузера
   ;1 ~~ "Success"
   ;2 ~~ "Object is not defined"
   ;3 ~~ "Site page is not defined"
   ;4 ~~ "TimeOut"
   ;5 ~~ "Browser closed by user"

   If Not IsObj($IEObject) Then
	  Return 2
   EndIf
   $IEObject.navigate($sUrl)
   If @error Then
	  Return 3
   EndIf

   Local $NowTime = @HOUR * 3600 + @MIN * 60 + @SEC
   Local $n = 0

   While 1
	  If $GuiWindow <> 0 Then
		 $nMsgLogin = GUIGetMsg()
		 If $nMsgLogin = $GUI_EVENT_CLOSE Then
		    Return 5
		 EndIf
	  EndIf
	  If $IEObject.readyState = 4 Or String($IEObject.readyState) = "complete" Then
		 $shtml = _IEBodyReadHTML($IEObject)
		 If StringInStr($IEObject.document.body.innerHTML,'This page can’t be displayed') = 0 And StringInStr($IEObject.document.body.innerHTML,'Navigation to the webpage was canceled') = 0 Then
		    Return 1
		 EndIf
	  EndIf
	  If $NowTime + $TimeOutSecond <= @HOUR * 3600 + @MIN * 60 + @SEC Then
		 Return 4
	  EndIf
   WEnd
EndFunc
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Это сжатие gzip
"Accept-Encoding", "deflate" так отсылайте
 
Верх