Автор Тема: Winhttprequest выдает неизвестную некому ошибку  (Прочитано 2630 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн c.rauf1986 [?]

  • Новичок
  • *
  • Сообщений: 14
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Пожалуйста помогите мне решить эту проблему.
при отправке с winhttprequest получаю ответ

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


Код: AutoIt [Выделить]
#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


Русское сообщество AutoIt

Winhttprequest выдает неизвестную некому ошибку
« Отправлен: Август 19, 2016, 12:22:38 »

Помечен как лучший ответ пользователем c.rauf1986 Отправлен Август 19, 2016, 16:01:10

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 462
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Winhttprequest выдает неизвестную некому ошибку
« Ответ #1, Отправлен: Август 19, 2016, 14:11:05 »
Это сжатие gzip
"Accept-Encoding", "deflate" так отсылайте

Русское сообщество AutoIt

Re: Winhttprequest выдает неизвестную некому ошибку
« Ответ #1 Отправлен: Август 19, 2016, 14:11:05 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
6 Ответов
4328 Просмотров
Последний ответ Октябрь 27, 2011, 23:54:35
от Garrett
13 Ответов
4281 Просмотров
Последний ответ Ноябрь 28, 2011, 00:10:32
от agikon
2 Ответов
2742 Просмотров
Последний ответ Январь 22, 2013, 18:45:27
от CreatoR
0 Ответов
1398 Просмотров
Последний ответ Декабрь 25, 2013, 17:13:59
от BizSV
4 Ответов
1386 Просмотров
Последний ответ Январь 24, 2015, 22:55:02
от joker2d
9 Ответов
1958 Просмотров
Последний ответ Март 17, 2015, 13:14:10
от InnI
3 Ответов
1031 Просмотров
Последний ответ Декабрь 15, 2016, 18:00:31
от Alofa
0 Ответов
521 Просмотров
Последний ответ Апрель 16, 2017, 16:28:17
от avtoIT
3 Ответов
846 Просмотров
Последний ответ Декабрь 17, 2017, 18:15:25
от InnI
0 Ответов
786 Просмотров
Последний ответ Апрель 05, 2018, 08:19:42
от Crusaderman