Что нового

InetRead и https

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Функция InetRead требует в качестве аргумента полного указания адреса, включая "http://". Если же сайт работает по протоколу https, то применить функцию InetRead уже не получается, вернее получается в том случае, если вместо https указать все-таки http, но при этом результат не всегда бывает предсказуемым. Существует ли возможность работы с https?
 
A

Alofa

Гость
Все работает: :ok:
Код:
$sData = InetRead("https://www.autoitscript.com")
$nBytesRead = @extended
MsgBox(4096, "", "Прочитанных байт: " & $nBytesRead & @CRLF & @CRLF & BinaryToString($sData))
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Alofa сказал(а):
Все работает: :ok:
Код:
$sData = InetRead("https://www.autoitscript.com")
$nBytesRead = @extended
MsgBox(4096, "", "Прочитанных байт: " & $nBytesRead & @CRLF & @CRLF & BinaryToString($sData))
Я ведь и не утверждал, что не работает. Работает, но непредсказуемо, т.е. результаты бывают не всегда такими, как если бы вместо запроса созданного при помощи InetRead, использовать прямой набор этого запроса в поисковой строке браузера с использованием https.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Попробуйте добавить (вторым параметром options) цифру два 2. Например
Код:
Local $url = "https://habrahabr.ru/company/spbifmo/blog/277153/"
MsgBox(0, "test https", BinaryToString( InetRead($url, 2) , 4) )
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
alex33 сказал(а):
Попробуйте добавить (вторым параметром options) цифру два 2. Например
Код:
Local $url = "https://habrahabr.ru/company/spbifmo/blog/277153/"
MsgBox(0, "test https", BinaryToString( InetRead($url, 2) , 4) )
Нет, запрос просто ничего не возвращает. Например, так возвращает пустую строку:
Код:
$file = FileOpen("GooglePage.html", 2)
Local $result = InetRead("https://www.google.com/")
Local $resultString = BinaryToString($result)
FileWrite($file, $resultString

а если использовать не https, а http, то страницу можно сохранить
 
A

Alofa

Гость
А ну-ка так:
Код:
#include <Inet.au3>
ConsoleWrite(_INetGetSource('https://www.google.com/')) ; Хотя это та же "InetRead()"



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

vitaliy4us
Судя по вашему коду вам нужна функция "InetGet()":
Код:
$hDownload = InetGet("https://www.google.com/", @ScriptDir & "\update.html", 1, 1)
Do
    Sleep(100)
Until InetGetInfo($hDownload, 2) ; Проверка завершения загрузки
InetClose($hDownload)
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Alofa сказал(а):
А ну-ка так:
Код:
#include <Inet.au3>
ConsoleWrite(_INetGetSource('https://www.google.com/'))
Ну не работает же, можете проверить. А http вместо https работает.
Alofa сказал(а):
Судя по вашему коду вам нужна функция:
Код:
InetGet()
Тоже не работает с https. Попробовал Ваш код (тот что выше). Действительно, возвращает какое-то количество полученных байт, но ведь все-равно после перевода в строку - пусто.
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
Alofa сказал(а):
Судя по вашему коду вам нужна функция "InetGet()":
Код:
$hDownload = InetGet("https://www.google.com/", @ScriptDir & "\update.html", 1, 1)
Do
    Sleep(100)
Until InetGetInfo($hDownload, 2) ; Проверка завершения загрузки
InetClose($hDownload)
Вот, с этим циклом ожидания - да сохранить получается. Но сохранять мне не нужно, это для примера. Нужно все-таки InetRead.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
alex33 сказал(а):
vitaliy4us сказал(а):
Нет, запрос просто ничего не возвращает.
Ну не работает же, можете проверить. А http вместо https работает.
Всё нормально возвращает. Я проверил.
вот видео как доказательство, посмотрите...
Видел, ну что тут скажешь. А у меня все то же создает пустой файл. Может старая Windows XP x64 играет какую-то роль?


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

Alofa сказал(а):
vitaliy4us
А что, пример от CreatoR вас тоже не удовлетворяет?
Мы все еще говорим об InetRead?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Модератор.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
vitaliy4us сказал(а):
А у меня все то же создает пустой файл. Может старая Windows XP x64 играет какую-то роль?
Ну, если прочитать из справки вот это:
Примечания
Для работы этой функции должен быть установлен Internet Explorer версии 3 или выше.
Remarks
Internet Explorer 3 or greater must be installed for this function to work.
может быть что-то из этого и играет роль...


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

А кстати, что возвращает @extended?
Попробуйте ещё поэкспериментировать с флагами 1, 2, 16...
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
CreatoR сказал(а):
К сожалению, _InetEx_GetFile тоже сохраняет пустой файл.


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

alex33 сказал(а):
А кстати, что возвращает @extended?
Попробуйте ещё поэкспериментировать с флагами 1, 2, 16...
Перепробовал уже на трех компьютерах - Windows 7 x64, Windows XP x64, Windows XP x32. Версии IE 10, 8, 6 соответственно. С флагами экспериментировал, @extended после использования InetRead возвращает -2146869244 на машине Windows XP x32 с IE 6 и 12157 на машине Windows XP x64 c IE 8. Но в итоге получаю пустую строку в обоих случаях. Экспериментировал вот с этим:
Код:
Local $result = InetRead("https://www.google.com")
MsgBox(0, "", "@extended = " & @extended)
Local $resultString = BinaryToString($result)
MsgBox(0,"", "@extended = " & @extended & @LF & "$resultString = " & $resultString)

Если использую https, в итоге получаю пустую строку. Если http - строка непустая, можно сохранить в файл, который при открытии однако, показывает несколько иную картинку, чем страничка Google, открытая в браузере (см. прилагаемый файл). Если пробовать страничку посложнее, например https://www.autoitscript.com , то возвращается пустая строка хоть для http, хоть для https/
 

Вложения

  • TwoPages.png
    TwoPages.png
    78.2 КБ · Просмотры: 12

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
vitaliy4us [?]
К сожалению, _InetEx_GetFile тоже сохраняет пустой файл.
Не может он сохранять пустой файл, он это просто не умеет делать.
Какие ошибки выдаёт?
 
Автор
V

vitaliy4us

Новичок
Сообщения
158
Репутация
4
CreatoR сказал(а):
vitaliy4us [?]
Не может он сохранять пустой файл, он это просто не умеет делать.
Какие ошибки выдаёт?
Выдает ошибку /ErrorStdOut и возвращает значение 0 и @error = 1 при таком коде (и в случае http, и в случае https):
Код:
#include 'InetEx.au3'
Local $result = _InetEx_GetFile("http://google.com", @ScriptDir & "\GooglePage.html", True, 0, '', '', 0)
MsgBox(0,"", "$result = " & $result & @LF & "@error = " & @error)

сохраняет пустой файл GooglePage.html
 

Вложения

  • blank file.png
    blank file.png
    60.4 КБ · Просмотры: 9
Верх