|
#1
|
|||
|
|||
Парсинг https
Здравствуйте, помогите, не получается парсить данные с сайта https://hh.ru
Пытаюсь так: Код:
try html :=IdHTTP1.Get(Edit1.Text); Edit2.Text :=Copy(html, Pos(Edit3.Text, html)+1, 7); except Ошибка: Error connecting with SSL Delphi7 indy10 Файлы libeay32.dll и ssleay32.dll в каталоге с .exe |
#2
|
|||
|
|||
Это не весь код, там надо IOHandler настроить.
у меня вот такой код на Delphi 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; |
#3
|
|||
|
|||
Цитата:
Та же самая ошибка. |
#4
|
|||
|
|||
Да нет, все работает.
Вот тестовый код: Код:
unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls; type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} uses IdHTTP, IdSSLOpenSSL; function 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; procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Text := ReadInternetPage('https://hh.ru'); end; end. Цитата:
На D10: 1. Создали проект, написали код. 2. Сохранили проект. 3. Скомпилили проект. В результате в папке проекта (если настройки по умолчанию не изменены) будет папочка Win32\Debug 4. Вот в эту папочку Win32\Debug кидаем две dll: libeay32.dll и ssleay32.dll 5. Запускаем проект, нажимаем кнопку - получаем результат. Возможные проблемы - программа не может загрузить openSSL dll. Почему это может происходить: 1. Библиотеки не найдены. Они должны быть либо рядом с исполняемым файлов (именно оттуда Win32\Debug, причем неважно, из IDE запуск или так), либо в домашней папке Window или Windows\System (я не рекомендую такой вариант, в т.ч. потому что см. п. 2) 2. Билиотеки неправильной версии. Там в какой-то момент openSSL поменял структуру библиотек, так что новые не совместимы со старыми, а Indy ожидает старый формат. У меня версия 0.9.8zh. Если правильно помню, то смена произошла где-то в версии 1.0.x, так что любая до 1.0 должна работать. Последний раз редактировалось lmikle, 08.12.2019 в 21:37. |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
Alex7 (13.12.2019)
|