![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Я пытаюсь использовать idHttp, чтобы выполнить какое-либо действия с другими сайтами например скачать файл, узнать курсы валют или получить информацию по ТИЦ и PR. За все тесты не один исходник не сработал, все исходники взяты с сайта https://delphisources.ru/. Вот пример кода получение ТИЦ и PR. 
		
	
		
		
		
		
		
	
		
		
	
	
	Код: 
	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.При попытке запустить выдает сообщение об ошибке. Цитата: 
	
  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Нашла другой способ с помощью Synapse, но в итоге все равно ничего не происходит. Вот пример кода: 
		
	
		
		
		
		
		
		
			Код: 
	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.Последний раз редактировалось Katerina1993, 21.06.2021 в 07:27.  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Не знаю что там с Синапсом, а с Инди все просто. 
		
	
		
		
		
		
		
	
		
		
	
	
	По умолчанию библиотека шифрования не подключена (ssl), а идет обращение к https, где она нужна. Я постил на форуме пример кода для https: Код: 
	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;Не звбыть положить соотв. библиотеки для SSL рядом с бинарником.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Цитата: 
	
 Ну и используйте пример кода lmikle для актуализации данных исходников.  |