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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 02.11.2023, 11:18
_omega772_ _omega772_ вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
По умолчанию не могу решить ошибку "error connecting with ssl"

Всем привет, уже несколько дней бьюсь с попытками получить ответ https запроса. Из доступных средств Delphi 2007 и Indy 9 и 10. Могу разве что библиотеки подгружать...
В итоге сварганил такую штуку
Код:
uses
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, IdIOHandler, IdIOHandlerSocket, IdSSLOpenSSL;

var
  IdHTTP1: TIdHTTP;
  IdSSLIOHandlerSocket1: TIdSSLIOHandlerSocketOpenSSL;
  response: WideString;

procedure TForm1.Button1Click(Sender: TObject);
begin
  IdHTTP1:=TIdHTTP.Create(nil);
  IdSSLIOHandlerSocket1:=TIdSSLIOHandlerSocketOpenSSL.Create(IdHTTP1);
  IdSSLIOHandlerSocket1.SSLOptions.Method := sslvSSLv2;
  IdHTTP1.IOHandler:=IdSSLIOHandlerSocket1;
  IdHTTP1.ProtocolVersion := pv1_1;
  IdHTTP1.Request.BasicAuthentication := false;
  IdHTTP1.Request.UserAgent := 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0';

  response:=IdHTTP1.Get('https://github.com/');

  memo1.Lines.add(response);
end;
но упорно выдаёт ошибку упомянутую в заголовке. Про то что нужны ssleay32.dll и libeay32 я знаю, вот только я уже куда только не пытался класть, у меня уже в каждой папочке проекта лежат их копии на всякий случай, даже сделал папку SSL с их копиями т.к. видел такую штук у кого то в реализации. Обращался с этой ситуацией к людям на других форумах, но мне просто посоветовали обновиться и использовать "THttpClient", в обоих случаях. Вот только я не могу обновиться! Меня попросил знакомый из государственной конторы а у них только его лицензионный диск и по этому ни на какую более новую версию перейти им ну вообще нельзя. Но библиотеку вроде Synapse поставить вроде как можно, но он просто не работает! Ни ошибок ни ответов на запрос... Кода к сожалению не осталось... Помогите пожалуйста найти хоть какое то решение!
Ответить с цитированием
  #2  
Старый 02.11.2023, 21:36
xchgeaxeax xchgeaxeax вне форума
Прохожий
 
Регистрация: 11.05.2023
Сообщения: 15
Версия Delphi: D7, Laz v2.2.6
Репутация: 10
По умолчанию

Цитата:
Сообщение от _omega772_
Про то что нужны ssleay32.dll и libeay32 я знаю, вот только я уже куда только не пытался класть
Положите их в одну из директорий перечисленных в системной переменной PATH.
Ответить с цитированием
  #3  
Старый 03.11.2023, 00:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. DLL надо класть рядом с EXE.
2. Вот такой код на Delphi XE3 работает с github:
Код:
procedure TForm1.Button1Click(Sender: TObject);
const
  url = 'https://github.com/';
var
  IdHTTP : TIdHTTP;
  IdSSLIOHandlerSocketOpenSSL : TIdSSLIOHandlerSocketOpenSSL;
  Response : String;
begin
  IdHTTP:=TIdHTTP.Create(nil);
  IdSSLIOHandlerSocketOpenSSL := 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';

    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Mode := sslmClient;
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.Method := sslvTLSv1;//sslvSSLv2;
    IdSSLIOHandlerSocketOpenSSL.SSLOptions.SSLVersions := [sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2];

    IdHTTP.IOHandler:=IdSSLIOHandlerSocketOpenSSL;

    response:=IdHTTP.Get(url);

    memo1.Lines.add(response);
  Finally
    IdSSLIOHandlerSocketOpenSSL.Free;
    IdHTTP.Free;
  End;
end;
3. Этот код работает с версией OpenSSL 1.0.2u (скачать здесь: https://github.com/IndySockets/OpenS...es/tree/master)
4. На некоторых сайтах не работает. Либо надо подбирать рабочую комбинацию Method и SSLVersion, либо вообще надо более позднюю версию OpenSSL для поддержки TLS v1.3, но текущая версия Indy такие не поддерживает, т.к. там поменялся API, тогда надо искать и ставить другую версию самой Indy и я не уверен, что такая вообще существует в стабильном варианте.

Вот как-то так.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
_omega772_ (07.11.2023)
  #4  
Старый 03.11.2023, 05:19
_omega772_ _omega772_ вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
По умолчанию Не помогло...

у меня этот код всё так же не работает
Сам код даже не весь работает на моих версиях библиотек
https://cdn.discordapp.com/attachmen...61810a6b91 9&
https://media.discordapp.net/attachm...630&height=105
если закомментировать строчку то ошибка будет такая же как и раньше.
Ещё упоминали за директорий но я не совсем понял. В общем сделал ещё и скриншот с подключениями библиотек на всякий случай. Сами библиотеки никак не трогались, как есть из коробки (буквально взяты с лицензионного диска D2007), разве что путь к Indy9 слетал, по этому я его прописал заново.
https://media.discordapp.net/attachm...554&height=435
Ответить с цитированием
  #5  
Старый 03.11.2023, 09:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А-а-а... так у тебя Indy 9.
Ну тогда не будет работать. Indy 9 не поддерживает TSL, насколько я помню. Качай и ставь Indy 10. Кстати, я посмотрел, там даже есть патч, который дает поддержку TSL 3 с новыми библиотеками (это версии 1.2 и выше).

ЗЫ. Да, перед установкой Indy 10 надо предыдущую версию полностью вычистить, включая bpl-и везде (воде при установке Дельфи их даже в системную папку пишет).

Последний раз редактировалось lmikle, 03.11.2023 в 09:19.
Ответить с цитированием
  #6  
Старый 03.11.2023, 09:19
_omega772_ _omega772_ вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
По умолчанию

посмотри на последнем скрине там лежат и Indy 9 и Indy 10. Он из коробки поставил сразу обе.
Ответить с цитированием
  #7  
Старый 04.11.2023, 05:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Походу, ты поставил 9ю, а 10я у тебя та, что с Дельфи идет.
Удаляй обе, качай последние исходники с сайта и ставь.
Я уже сталкивался с этим. Версия, которая идет с самой Дельфей, не самая последняя, тем более, которая идест с 2007й.
С XE3, вроде, идет 10.5.9 (не уверен, но 10.5 точно). Она поддерживает TLS 1.2, который тебе и нужен.
Ответить с цитированием
  #8  
Старый 07.11.2023, 15:17
_omega772_ _omega772_ вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
Вопрос Компиляция Indy

Я переустановил дэлфи изначально без библиотеки Indy, т.к. устал её выгрызать, однако когда стал устанавливать с довольно непонятной инструкцией... в библиотеке есть множество проектов и нужно скомпилировать тот который подходит для твоей версии дэлфи... но я не знаю какой именно нужно компилировать под дэлфи 2007 !? Я пытался собрать Indy70, т.к. вроде бы 2007 совместим с 7, но оно не собралось, я следовал инструкции и сначала пытался соборать "IndySystem", но получил следующую ошибку: "[DCC Warning] IdStackWindows.pas(1847): W1035 Return value of function 'TIdSocketListWindows.GetItem' might be undefined". При просмотре деталей выдаёт кучу текста в которой я ничего не понимаю.https://cdn.discordapp.com/attachmen...4e9c288ae2 3&
Ответить с цитированием
  #9  
Старый 07.11.2023, 19:04
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Вообще-то это WARNING, т.е. просто предупреждение. Смотри те строки, где именно ERROR.
По поводу пакетов, тебе нужны, если не ошибаюсь, те, которые 180 для D2007.
Ответить с цитированием
  #10  
Старый 07.11.2023, 21:38
_omega772_ _omega772_ вне форума
Прохожий
 
Регистрация: 02.11.2023
Сообщения: 5
Версия Delphi: Delphi 2007
Репутация: 10
Смех Решил!

В общем попробовал установить именно Indy110 в итоге всё завелось! Спасибо за помощь!
Ответить с цитированием
  #11  
Старый 08.11.2023, 00:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

You're welcome.
Только помни, что если в какой-то момент потребуется TLS 1.3, а он пока там лежит как PR.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter