|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Не получается запустить исходник работающий с библиотекой idHttp?
Я пытаюсь использовать 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 для актуализации данных исходников. |