|
|
Регистрация | << Правила форума >> | 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. Он из коробки поставил сразу обе.
|
#7
|
|||
|
|||
Походу, ты поставил 9ю, а 10я у тебя та, что с Дельфи идет.
Удаляй обе, качай последние исходники с сайта и ставь. Я уже сталкивался с этим. Версия, которая идет с самой Дельфей, не самая последняя, тем более, которая идест с 2007й. С XE3, вроде, идет 10.5.9 (не уверен, но 10.5 точно). Она поддерживает TLS 1.2, который тебе и нужен. |
#8
|
|||
|
|||
Компиляция 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
|
|||
|
|||
Вообще-то это WARNING, т.е. просто предупреждение. Смотри те строки, где именно ERROR.
По поводу пакетов, тебе нужны, если не ошибаюсь, те, которые 180 для D2007. |
#10
|
|||
|
|||
Решил!
В общем попробовал установить именно Indy110 в итоге всё завелось! Спасибо за помощь!
|
#11
|
|||
|
|||
You're welcome.
Только помни, что если в какой-то момент потребуется TLS 1.3, а он пока там лежит как PR. |