Что нового

Сеть, интернет Проблема с http на windows 7

antiwinforever

Новичок
Сообщения
20
Репутация
0
Здравствуйте! Помогите пожалуйста решить проблему. Бьюсь уже несколько дней.
Код:
$oHTTP.Open('GET либо POST', 'http либо https', False)
$oHTTP.SetRequestHeader('Content-Type','application/x-www-form-urlencoded')
   $oHTTP.SetRequestHeader('Upgrade-Insecure-Requests', '1')
   $oHTTP.SetRequestHeader('sec-ch-ua', '"Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"')
   $oHTTP.SetRequestHeader('sec-ch-ua-mobile', '?0')
   $oHTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36")
   $oHTTP.SetRequestHeader('Accept', 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9')
   $oHTTP.SetRequestHeader('Connection', 'Close')
   $oHTTP.Send('')
   $oHTTP.WaitForResponse
   $sHTML = $oHTTP.ResponseText
   $headers1 = $oHTTP.GetAllResponseHeaders()

Код:
$url = "http либо https"
$oHTTP3 = ObjCreate('Msxml2.XMLHTTP.6.0')
$oHTTP3.Open('GET', $url)
$oHTTP3.SetRequestHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)")
$oHTTP3.SetRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
$oHTTP3.Send('')
While $oHTTP3.readyState <> 4
WEnd
$sResponse = $oHTTP3.ResponseText

Оба этих кода прекрасно работают на Win10. Но как только запускаю под Win7 вылетает с критической ошибкой.
Причем только на определенном сервере. По соображениям безопасности не могу назвать сам сервер.
В первом случае вылетает ошибка "Что то там с каналами безопасности"
Во втором "Ошибка загрузки указанного ресурса" 80020009
Нет возможности посмотреть ошибку в интерпритаторе. Только в скомпилированном варианте.
Пробовал даже через InetGet() скачать страницу, тоже самое. Вылетает с ошибкой. А под Win 10 все варианты работают.
Причем пробовал на нескольких компьютерах (на 6). На всех один результат. Дело именно в операционной системе. К сожаление так же нет возможности изменить какие либо настройки в компьютерах. Могу только изменить код программы.

Помогите пожалуйста решить проблему.

Autoit 3.3.14.5
 
Последнее редактирование:
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Эта функция не должна вылетать с ошибкой, что именно за ошибка?
В скомпилированном варианте сам Autoit пишет "subscript used on non-accessible variable"
Ровно тоже самое... А отслеживание ошибок COM не срабатывает.

Сообщение автоматически объединено:

Может есть какой то вариант готового скрипта с реализацией напрямую через TCP соединение?
Боюсь допустить ошибку при реализации TCP протокола, поэтому ищу готовый вариант. Заодно появится возможность изучить проблему подробнее. Нужно только получить ответ HTML по GET запросу.
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
В скомпилированном варианте сам Autoit пишет "subscript used on non-accessible variable"
Ну так это не связано с запросами.
Приведённый скрипт не может вызывать подобную ошибку, выложите ваш скрипт (или ту часть которая воспроизводить проблему).
Также можно использовать OnAutoItErrorRegister чтобы выявить проблемный участок кода.
 
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Ну так это не связано с запросами.
Приведённый скрипт не может вызывать подобную ошибку, выложите ваш скрипт (или ту часть которая воспроизводить проблему).
Также можно использовать OnAutoItErrorRegister чтобы выявить проблемный участок кода.
Про OnAutoItErrorRegister думал в первую очередь. Ссылка на скачку не работала. Поэтому не смог использовать.
А по коду ругается на строчку
Код:
$oHTTP.Send('')

В случае с inetget(), собственно на него и ругается.
Причем если ставлю другой адрес, другого сервера, то все нормально работает. На этих компьютерах, сервер с которым не работает, в браузере запускается нормально.
OnAutoItErrorRegister пишет:
"The requested action with this objectnhas failed."
 
Последнее редактирование:

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Это означает что используемая переменная не является массивом.
В общем нужно видеть код.
Понял такую закономерность в работе скрипта. Для примера взял такой код:
Код:
#include <MsgBoxConstants.au3>
#include <WinAPIFiles.au3>

; Download a file in the background.
; Wait for the download to complete.

Example()

Func Example()
    Local $g = InputBox("", "", "https://autoit-script.ru/")


    ; Download the file by waiting for it to complete. The option of 'get the file from the local cache' has been selected.
    Local $iBytesSize = InetGet($g, @ScriptDir & "\ss.txt", 1)

    ; Retrieve the filesize.
    Local $iFileSize = FileGetSize(@ScriptDir & "\ss.txt")

    ; Display details about the total number of bytes read and the filesize.
    MsgBox($MB_SYSTEMMODAL, "", "The total download size: " & $iBytesSize & @CRLF & _
            "The total filesize: " & $iFileSize)


EndFunc   ;==>Example

Все работает замечательно. Но если заменить ссылку в коде на другую. Например на:
https://leroymerlin.ru/
То на Win 10 все работает, а на Win 7 пишет что скачано 0 байт. И файл не скачивается. И нет никаких ошибок. А в случае с
Код:
$oHTTP.Send('')

вылетает ошибка
Это означает что используемая переменная не является массивом.

Помогите пожалуйста, уже весь мозг сломал...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
на Win 7 пишет что скачано 0 байт
Значит что то блокирует файл или сервер, нужно смотреть настройки безопасности браузера IE.
Помогите пожалуйста
Мне нужно видеть код чтобы попытаться это сделать.
 

Webarion

Знающий
Сообщения
101
Репутация
9
Странно, у меня вроде норм леруа открывается.

Попробуйте этот код, что выдаст:
Код:
$igDEBUG_HelperHTTP = 1

$url = 'https://leroymerlin.ru/'
$oHTTP3 = ObjCreate('Msxml2.XMLHTTP.6.0')

Global $ogError_HelperHTTP = ObjEvent('AutoIt.Error', '__Debug_HelperHTTP')

$oHTTP3.Open('GET', $url)
$oHTTP3.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0")
$oHTTP3.SetRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate")
$oHTTP3.Send('')
While $oHTTP3.readyState <> 4
WEnd
$sResponse = $oHTTP3.ResponseText

ConsoleWrite($sResponse)


Func __Debug_HelperHTTP($ogError_HelperHTTP, $iScriptLine = '')
    If IsString($ogError_HelperHTTP) Then
        Local $sSign = StringLeft($ogError_HelperHTTP, 1)
        Local $iSign = StringInStr('>!-+', $sSign) ? $sSign : ''
        $ogError_HelperHTTP = $iSign ? StringRight($ogError_HelperHTTP, StringLen($ogError_HelperHTTP) - 1) : $ogError_HelperHTTP
        Local $sMsg = $iSign & @ScriptName & ' MsgLine(' & $iScriptLine & ') : ==> ' & $ogError_HelperHTTP
        If $igDEBUG_HelperHTTP Then ConsoleWrite($sMsg & @CRLF)
        Return SetError(1, 0, 0)
    ElseIf Not IsObj($ogError_HelperHTTP) Then
        Return SetError(2, 0, 0)
    EndIf
    Local $iErrNumber = Hex($ogError_HelperHTTP.number, 8)
    If $igDEBUG_HelperHTTP Then
        Local $sWindescription = $ogError_HelperHTTP.windescription
        Local $sDescription = $ogError_HelperHTTP.description
        Local $sSource = $ogError_HelperHTTP.source
        Local $sHelpfile = $ogError_HelperHTTP.helpfile
        Local $sHelpcontext = $ogError_HelperHTTP.helpcontext
        Local $sLastdllerror = $ogError_HelperHTTP.lastdllerror
        Local $sRetcode = "0x" & Hex($ogError_HelperHTTP.retcode)
        ConsoleWrite(@ScriptName & " (" & $ogError_HelperHTTP.scriptline & ") : ==> COM " & __TrHH("Error", "Ошибка") & "!" & @CRLF) ; Получена ошибка COM
        ConsoleWrite(__TrHH("Number is", "Номер ошибки") & ": " & @TAB & @TAB & "0x" & $iErrNumber & @CRLF)
        If $sWindescription Then ConsoleWrite(__TrHH("Windescription", "Системное описание ошибки") & ":" & @TAB & $sWindescription & @CRLF)
        If $sDescription Then ConsoleWrite(__TrHH("Description is", "Описание") & ": " & @TAB & $sDescription & @CRLF)
        If $sSource Then ConsoleWrite(__TrHH("Source is", "Источник") & ": " & @TAB & @TAB & $sSource & @CRLF)
        If $sHelpfile Then ConsoleWrite(__TrHH("Helpfile is", "Файл справки") & ": " & @TAB & $sHelpfile & @CRLF)
        If $sHelpcontext Then ConsoleWrite(__TrHH("Helpcontext is", "Контекст помощи") & ": " & @TAB & $sHelpcontext & @CRLF)
        If $sLastdllerror Then ConsoleWrite(__TrHH("Lastdllerror is", "Последняя ошибка dll") & ": " & @TAB & $sLastdllerror & @CRLF)
        If $sRetcode Then ConsoleWrite(__TrHH("Retcode is", "Возвращённый код") & ": " & @TAB & $sRetcode & @CRLF & @CRLF)
    EndIf
    Return SetError(3, $iErrNumber, 0)
EndFunc

; Translator. Переводчик
Func __TrHH($sEng, $sRus)
    If @OSLang = '0419' Then Return $sRus
    Return $sEng
EndFunc

Сообщение автоматически объединено:

Если возвращённый код, 0x80070005, это ошибка доступа. В системе что-то блокирует. Проверьте UAC, попробуйте без антивируса, проверьте доступ к msxml6.dll
Иногда такое возможно, если в системе отсутствует или отключено TLS шифрование:
Обновление для обеспечения протокола TLS 1.1 и TLS 1.2
Ещё вариант
Сообщение автоматически объединено:

Ещё один момент, у меня например на семёрке выпадает в COM ошибку вот этот адрес: http://www.autoitscript.com/autoit3/files/beta/update.dat
Если используется Msxml2.XMLHTTP.6.0, но через WinHTTP.WinHTTPRequest.5.1 грузит нормально:
Код:
Local $oHttp = ObjCreate("WinHTTP.WinHTTPRequest.5.1")
$oHttp.open ("GET", "http://www.autoitscript.com/autoit3/files/beta/update.dat", False)
;~ $oHttp.Option(9) = 2688 ; 128 - TLS 1.0, 512 - TLS 1.1, 2048 - TLS 1.2, 2056 - TLS 1.1 & TLS 1.2
$oHttp.Send('')
$oHTTP.WaitForResponse()
ConsoleWrite($oHttp.responseText & @CRLF)
 
Последнее редактирование:
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Если возвращённый код, 0x80070005, это ошибка доступа. В системе что-то блокирует. Проверьте UAC, попробуйте без антивируса, проверьте доступ к msxml6.dll
Пишет test.exe (-1): ==> COM Ошибка!
Номер ошибки 0x80020009
Описание: Отказано в доступе
Возвращенный код: 0x80070005

Причем тоже самое даже на win10 выдает... Хотя там точно вся защита отключена.

Значит все-таки блок? Стоит Касперский ES 11. Но он запаролен.... Нет возможности даже на время отключить защиту...
Иногда такое возможно, если в системе отсутствует или отключено TLS шифрование:
Обновление для обеспечения протокола TLS 1.1 и TLS 1.2
Ещё вариант
Попробовал второй вариант. Там у вас есть ссылка, по которой можно проверить. Если страница не загружается, то значит отключено TLS. Так и есть, страница не грузит...
Я с самого начала думал на это, и даже проверил. На вин 10, где программа работает без проблем, там в реестре есть ключ, а на семерке нет вообще никакого.

Но проблема в том, что у меня нет прав доступа, чтобы внести изменения в реестре и тем более устанавливать обновления. Браузер же как то обходится без TLS. И мне нужно как то без внесения изменений в компьютер обойтись. Поэтому и прошу помочь...
К сожаление так же нет возможности изменить какие либо настройки в компьютерах. Могу только изменить код программы.
 
Последнее редактирование:
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Похоже дело зашло в тупик... Как бы вы сами вышли из этой ситуации, посоветуйте что-нибудь. Как понять почему в браузере все работает, а в коде нет?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,659
Репутация
2,457
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Ресурс доступен только локально... Прокси не поможет.
Права доступа? #RequireAdmin пробовал добавить?
Прав нет точно. С #RequireAdmin не запустится...
А разве права помогут в случае если проблема в TLS?
 
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
А случайно нет dll от браузера chrome что бы через него получить данные из сети не поднимая свое соединение?
Нашел только UDF для управления браузером. А нужно не запуская браузер получить код из сети.
 

Webarion

Знающий
Сообщения
101
Репутация
9
Попробовал второй вариант. Там у вас есть ссылка, по которой можно проверить. Если страница не загружается, то значит отключено TLS. Так и есть, страница не грузит...
Я с самого начала думал на это, и даже проверил. На вин 10, где программа работает без проблем, там в реестре есть ключ, а на семерке нет вообще никакого.

Но проблема в том, что у меня нет прав доступа, чтобы внести изменения в реестре и тем более устанавливать обновления. Браузер же как то обходится без TLS. И мне нужно как то без внесения изменений в компьютер обойтись.
Ссылка у меня тоже не грузит. Хотя страницы открываются. Возможно просто битая.
Что у вас отдаёт вот этот код:
Код:
Dim $oHttp = ObjCreate("WinHTTP.WinHTTPRequest.5.1")
$oHttp.open ("GET", "https://howsmyssl.com/a/check", False)
$oHttp.Send('')
$oHTTP.WaitForResponse()
ConsoleWrite($oHttp.responseText & @CRLF)

И вот этот проверьте на всякий случай:
Код:
Local $oHttp = ObjCreate("WinHTTP.WinHTTPRequest.5.1")
$oHttp.open ("GET", "https://leroymerlin.ru/", False)
$oHttp.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:82.0) Gecko/20100101 Firefox/82.0")
$oHttp.Send('')
$oHTTP.WaitForResponse()
ConsoleWrite($oHttp.responseText & @CRLF)
 
Автор
A

antiwinforever

Новичок
Сообщения
20
Репутация
0
Что у вас отдаёт вот этот код
Приложил скрин первого кода. Второй скрин это ошибка, которая вылазит если вставляю свой сервер.
А с сервером leroymerlin.ru возвращает html
Фото

Не загружается фото на форум, поэтому ссылку вставил.
 
Последнее редактирование:

Webarion

Знающий
Сообщения
101
Репутация
9
Как уже сказано, что-то в винде блокирует. Сложно сказать, без самого адреса сервера, к которому вы обращаетесь. Сбрасывайте на [email protected] это моя почта. Со своей стороны даю слово, что никуда не улетит, и после тестов на своей семёрке я его удалю, в том числе из почты. Но, выбор конечно за вами. А так вот, сложно сказать.
 
Последнее редактирование:
Верх