Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.09.2018, 00:23
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию Ошибка IOHandler value is not valid

Приветствую.
Кидаю IdHTTP с Indy client
Код:
uses ... IdHTTP
...
procedure TForm1.Button1Click(Sender: TObject);
begin
 Memo1.Text:=Idhttp1.Get('https://google.com/');
end;
 
Получаю ошибку
Цитата:
IOHandler value is not valid.

А вот с http:// нормально работает
А с httpS:// не хочет

Почитал в интернетах, но везде эта проблема решается "через пень колоду".
Какие то dll*ки надо рядом с exe кидать, какие то дополнительные компоненты накидывать...

Может есть нормальное решение ?
Может новый компонент какой ?
Или через Win Api как...

Мне надо спарсить с https странички несколько строчек.

Последний раз редактировалось TEKTON, 28.09.2018 в 03:42.
Ответить с цитированием
  #2  
Старый 28.09.2018, 05:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да нет там ничего сложного.
Да, надо скачать архив с парой dll и просто положить их рядом с бинарником. А код выглядит так (это для Д 10 Токио):
Код:
function TMonitorItem.ReadInternetPage(AUrl : String) : String;
var
  IdHTTP : TIdHTTP;
  Id_HandlerSocket : TIdSSLIOHandlerSocketOpenSSL;
begin
  IdHTTP := TIdHTTP.Create(Nil);
  Id_HandlerSocket := TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP);
  Try
    IdHTTP.Request.BasicAuthentication := False;
    IdHTTP.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

    Id_HandlerSocket.SSLOptions.Mode := sslmClient;
    Id_HandlerSocket.SSLOptions.Method := sslvSSLv23;
    IdHTTP.IOHandler := Id_HandlerSocket;

    Result := IdHTTP.Get(AUrl);
  Finally
    Id_HandlerSocket.Free;
    IdHTTP.Free;
  End;
end;
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (28.09.2018)
  #3  
Старый 28.09.2018, 10:35
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Да нет там ничего сложного.
Да, надо скачать архив с парой dll и просто положить их рядом с бинарником. ...
И что?
Потом эти Dll надо будет тягать с основным Exe готовой программы?
Или они внутрь вкомпилируются?
Ответить с цитированием
  #4  
Старый 28.09.2018, 20:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Надо.
Хотя где-то видел версию, которая вкомпилирует код из объектников, но это что-то было не официальное и не стабильное.

В принципе, тут 3 варианта:
1. Просто тягаем библиотеки вместе с программой. Не проблема, либо просто в архиве, либо включаем в инсталятор.
2. Кладем библиотеки в Windows (или Windows/System32) и забываем на
этой машине о них.
3. "Пришиваем" библиотеки к основной программе и при старте распаковываем их самостоятельно (не работает по умолчанию в случае установки в Program Files - там права админа для записи нужны).
3а. Распаковку делаем во временный каталог и грузим либы из него. Но, вроде, там тоже надо сырцы Indy пропатчить слегка.
Ответить с цитированием
  #5  
Старый 29.09.2018, 19:02
TEKTON TEKTON вне форума
Новичок
 
Регистрация: 14.03.2011
Сообщения: 60
Репутация: 10
По умолчанию

Мдя...
Вот блин учудили с этим HttpS
А по другому никак нельзя код странички получить ?
Может какими другими компонентами?
Неужели народ так и мучается с этой хренью...

Спустя какое то время...
Наткнулся вот на такое (см. последний ответ)
https://toster.ru/q/73040
Тоесть можно этот unit U_HTTPSrv; сохранить в *.pas и просто в uses подключать?
Или как это работает?
Если можно примерчик.

З.Ы. А как с этим https обстоят дела с других языках? C++ и т.п.
Или только делфа с помощью костылей этих работает?

Последний раз редактировалось TEKTON, 29.09.2018 в 21:17.
Ответить с цитированием
  #6  
Старый 29.09.2018, 22:46
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,004
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Да ничего там не учудили. Я тебе дал готовую процедуру. Просто вызываешь ее и все работает (ну только библиотечки надо рядом с ехе кинуть).
2. В том ответе просто пример на примере сервера, хотя по коду все тоже самое.
3. В других языках все так же. Полностью готового кода нет. Весь вопрос в библиотеках. Вообще, есть готовый метод в WinAPI, который задействует встроенный IE для загрузки странички. Лень искать, погугли сам. Но помню там был целый модуль для того, что бы использовать его, кода страницы на 2-3...
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
TEKTON (29.09.2018)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter