![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Всем привет, уже несколько дней бьюсь с попытками получить ответ 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, т.к. устал её выгрызать, однако когда стал устанавливать с довольно непонятной инструкцией... в библиотеке есть множество проектов и нужно скомпилировать тот который подходит для твоей версии дэлфи... но я не знаю какой именно нужно компилировать под дэлфи 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. |