Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.06.2021, 21:21
Katerina1993 Katerina1993 вне форума
Прохожий
 
Регистрация: 22.09.2018
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Не получается запустить исходник работающий с библиотекой idHttp?

Я пытаюсь использовать idHttp, чтобы выполнить какое-либо действия с другими сайтами например скачать файл, узнать курсы валют или получить информацию по ТИЦ и PR. За все тесты не один исходник не сработал, все исходники взяты с сайта https://delphisources.ru/. Вот пример кода получение ТИЦ и PR.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
  IdHTTP, StdCtrls,shellapi, IdAntiFreezeBase, IdAntiFreeze,RegExpr, IdAuthentication, IdHeaderList,
  Menus, ExtCtrls, Jpeg, IniFiles;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    IdHTTP1: TIdHTTP;
    IdAntiFreeze1: TIdAntiFreeze;
    Memo1: TMemo;
    Edit1: TEdit;
    Label1: TLabel;
    Label3: TLabel;
    MainMenu1: TMainMenu;
    N2: TMenuItem;
    N3: TMenuItem;
    Image1: TImage;
    Button2: TButton;
    N4: TMenuItem;
    N5: TMenuItem;
    Label5: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Ini:TIniFile;
 
implementation
 
uses IdHTTPHeaderInfo, Unit2;
 
{$R *.dfm}
 
function Pars(T_, ForS, _T: string): string;
var
 a, b: integer;
begin
if (T_ <> '') and (ForS <> '') and (_T <> '') then begin
a := Pos(T_, ForS);
Result := Copy(ForS, a+Length(T_), Length(ForS));
b := Pos(_T, Result);
Result := Copy(Result, 1, b-1);
end
 else
Result := 'NOT STR';
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
str:TStringList;
s,st:string;
st1:string[20];
i,j:integer;
Stream, Stream2:TStream;
jpg:TJPEGImage;
begin
try
  st1:='';
  str:=TStringList.Create;
  str.Clear;
  str.Add('url='+Edit1.Text);
  IdHTTP1.Post('https://pr-cy.ru/analysis/?',str);
  s:=IdHTTP1.Get('https://pr-cy.ru/analysis/?url='+Edit1.Text);
  Memo1.Text:=s;
  if pos('<td width="25%" align="right" bgcolor="#eef2f5">',Memo1.Text)<>0 then
   begin
    Memo1.HideSelection:=false;
    Memo1.SelStart:=pos('<td width="25%" align="right" bgcolor="#eef2f5">',Memo1.Text)-1;
    Memo1.SelLength:=length('<td width="25%" align="right" bgcolor="#eef2f5">');
   end;
  Memo1.CutToClipboard;
  st:=pars('<td width="25%" align="right" bgcolor="#eef2f5">',Memo1.Text,'<script type="text/javascript">');
  for i:=1 to length(st) do
   begin
    if st[i]='/' then
     j:=i;
   end;
   for i:=1 to j-1 do
    begin
     st1:=st1+st[i];
    end;
    jpg:=TJPEGImage.create;
    Stream:=TStringStream.Create(IdHTTP1.Get('https://pr-cy.ru/imagesite.php?domen='+Edit1.Text));
    jpg.LoadFromStream(Stream);
    Image1.Picture.Assign(jpg);
    Label1.Caption:='тИЦ: '+Pars('<td width="25%" align="right" bgcolor="#eef2f5">',s,'</td>');
    if Label1.Caption='' then
     Label1.Caption:='тИЦ: 0';
    Label3.Caption:='PR: '+st1;
except
 on e:Exception do
  Application.MessageBox('Нет соединение с Интернетом или прокси-сервером','Внимание',MB_OK);
end;
end;
 
 
procedure TForm1.FormCreate(Sender: TObject);
var
checked:string;
begin
   Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'Setting.ini');
   checked:=ini.ReadString('Param','Checked','');
   if (checked='true') then
    begin
     IdHTTP1.ProxyParams.ProxyPassword:=Ini.ReadString('Param','Password','');
     IdHTTP1.ProxyParams.ProxyPort:=Ini.ReadInteger('Param','Port',0);
     IdHTTP1.ProxyParams.ProxyServer:=Ini.ReadString('Param','Server','');
     IdHTTP1.ProxyParams.ProxyUsername:=Ini.ReadString('Param','UserName','');;
     IdHTTP1.ProxyParams.BasicAuthentication:=true;
    end;
end;
 
procedure TForm1.N3Click(Sender: TObject);
begin
 form2.ShowModal;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
str:TStringList;
s,s1,s2:string;
begin
str:=TStringList.Create;
str.Clear;
str.Add('url='+Edit1.Text);
IdHTTP1.Post('http://tooby.ru/include/cr.php?',str);
s:=IdHTTP1.Get('http://tooby.ru/include/cr.php?url='+Edit1.Text);
s1:=Pars('<cy>',s,'</cy>');
Label1.Caption:='тИЦ: '+s1;
s2:=Pars('<pr>',s,'</pr>');
Label3.Caption:='PR: '+s2;
end;
 
procedure TForm1.N5Click(Sender: TObject);
begin
ShowMessage('andrey53@uvaga.by');
end;
 
end.

При попытке запустить выдает сообщение об ошибке.
Цитата:
Project Project2.exe raised exception class EIDIOhandlerPropInvalid with message 'IOHandler value is not valid'. Process sropped. Use Step or Run to continue.
В чем может быть проблема, как исправить?
Ответить с цитированием
  #2  
Старый 21.06.2021, 07:22
Katerina1993 Katerina1993 вне форума
Прохожий
 
Регистрация: 22.09.2018
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Нашла другой способ с помощью Synapse, но в итоге все равно ничего не происходит. Вот пример кода:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,httpsend,synacode,SSL_OpenSSL;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    sMemo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  function Pars(T_, ForS, _T: string): string;
var
  Form1: TForm1;
  info : string;
 
implementation
 
{$R *.dfm}
 
function Pars(T_, ForS, _T: string): string;
var
a, b: integer;
begin
Result := '';
if (T_ = '') or (ForS = '') or (_T = '') then Exit;
a := Pos(T_, ForS);
if a = 0 then Exit
else a := a + Length(T_);
 
ForS := Copy(ForS, a, Length(ForS) - a + 1);
b := Pos(_T, ForS);
if b > 0 then Result := Copy(ForS, 1, b - 1);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
HTTP: THTTPSend;
HTML : TStringList;
begin
HTTP:= THTTPSend.Create;
HTML := TStringList.Create;
HTTP.MimeType:='application/x-www-form-urlencoded';
//Например WarFrame :)
 
if HTTP.HTTPMethod('GET','https://warframe.com/ru') then
begin
 
HTML.LoadFromStream(HTTP.Document);
 
info :=Pars('"theme_token":"',Utf8ToAnsi(html.Text),'","');
sMemo1.Lines.Add(info);
end;
end;
end.
В чем может быть проблема, не проходит условие if HTTP.HTTPMethod('GET','https://warframe.com/ru') then?

Последний раз редактировалось Katerina1993, 21.06.2021 в 07:27.
Ответить с цитированием
  #3  
Старый 02.07.2021, 21:11
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Не знаю что там с Синапсом, а с Инди все просто.
По умолчанию библиотека шифрования не подключена (ssl), а идет обращение к https, где она нужна.
Я постил на форуме пример кода для https:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
Код работает на Delphi 10.
Не звбыть положить соотв. библиотеки для SSL рядом с бинарником.
Ответить с цитированием
  #4  
Старый 03.07.2021, 17:50
Аватар для Admin
Admin Admin вне форума
Администратор
 
Регистрация: 03.10.2005
Адрес: Россия, Москва
Сообщения: 1,553
Версия Delphi: Delphi 7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Katerina1993
Я пытаюсь использовать idHttp, чтобы выполнить какое-либо действия с другими сайтами например скачать файл, узнать курсы валют или получить информацию по ТИЦ и PR. За все тесты не один исходник не сработал, все исходники взяты с сайта https://delphisources.ru/. Вот пример кода получение ТИЦ и PR.
Некторым исходникам на сайте более 15 лет, поэтому на части из них потребуется обновить код, а некоторые вовсе уже неактуальны - вместо тИЦ у яндекса теперь ИКС, а Google PageRank и вовсе упразднен лет 5 назад.

Ну и используйте пример кода lmikle для актуализации данных исходников.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:18.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025