Нужно всего-то передать методом Post xml-запрос на указанный адрес. В ответ получить xml-ответ, который записать в мемо и спокойно читать.
Нашёл, гугля, аж несколько примеров, НО... У адреса протокол HTTPS это приводит к тому, что вместо xml-ответа получаю html с надписью про ошибку 400.
Код который сейчас у меня работает, когда просто http, а не https:
- Код: Выделить всё
.....
interface
uses
Classes, SysUtils, lhttp, lHTTPUtil, lNet, FileUtil, Forms, Controls,
Graphics, Dialogs, StdCtrls, LCLIntf;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
done:boolean;
function ClientInput(ASocket: TLHTTPClientSocket; ABuffer: pchar; ASize: integer): integer;
procedure ClientDisconnect(ASocket: TLSocket);
procedure ClientDoneInput(ASocket: TLHTTPClientSocket);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
function TForm1.ClientInput(ASocket: TLHTTPClientSocket; ABuffer: pchar; ASize: integer): integer;
begin
memo1.Text:=ABuffer;
end;
procedure TForm1.ClientDisconnect(ASocket: TLSocket);
begin
done := true;
end;
procedure TForm1.ClientDoneInput(ASocket: TLHTTPClientSocket);
begin
ASocket.Disconnect;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
httpclient: TLHTTPClient;
sHost, sUrl: string;
sPort: word;
begin
try
httpclient := TLHTTPClient.Create(nil);
httpclient.OnDisconnect := @ClientDisconnect;
httpclient.OnDoneInput := @ClientDoneInput;
httpclient.OnInput := @ClientInput;
DecomposeURL('https://www.moyservis.ru/script.aspx', sHost, sUrl, sPort);
httpclient.Method := hmPost;
httpclient.Port := sPort;
httpclient.Host := sHost;
httpclient.URI := sUrl;
httpclient.AddExtraHeader('Keep-Alive: 300');
httpclient.AddExtraHeader('Connection: keep-alive');
httpclient.AddExtraHeader('Content-Type: text/xml');
httpclient.AddExtraHeader(LineEnding);
httpclient.AddExtraHeader(
'<myservice-request>' + LineEnding +
'<blablabla>123</blablabla>' +LineEnding +
'</myservice-request>'
);
httpclient.SendRequest;
Done := false;
while not Done do
HttpClient.CallAction;
finally
httpclient.Free;
end;
end;
end.