|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
не могу решить ошибку "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; |
#2
|
|||
|
|||
Цитата:
|
#3
|
|||
|
|||
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; 4. На некоторых сайтах не работает. Либо надо подбирать рабочую комбинацию Method и SSLVersion, либо вообще надо более позднюю версию OpenSSL для поддержки TLS v1.3, но текущая версия Indy такие не поддерживает, т.к. там поменялся API, тогда надо искать и ставить другую версию самой Indy и я не уверен, что такая вообще существует в стабильном варианте. Вот как-то так. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
_omega772_ (07.11.2023)
|
#4
|
|||
|
|||
Не помогло...
у меня этот код всё так же не работает
Сам код даже не весь работает на моих версиях библиотек 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
|
|||
|
|||
А-а-а... так у тебя Indy 9.
Ну тогда не будет работать. Indy 9 не поддерживает TSL, насколько я помню. Качай и ставь Indy 10. Кстати, я посмотрел, там даже есть патч, который дает поддержку TSL 3 с новыми библиотеками (это версии 1.2 и выше). ЗЫ. Да, перед установкой Indy 10 надо предыдущую версию полностью вычистить, включая bpl-и везде (воде при установке Дельфи их даже в системную папку пишет). Последний раз редактировалось lmikle, 03.11.2023 в 09:19. |
#6
|
|||
|
|||
посмотри на последнем скрине там лежат и Indy 9 и Indy 10. Он из коробки поставил сразу обе.
|