![]() |
|
|
#1
|
|||
|
|||
|
Здравствуйте, помогите, не получается парсить данные с сайта 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)
| ||