Lazarus+HTTPS+Post+XML

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Lazarus+HTTPS+Post+XML

Сообщение tema »

Хочу воспользоваться API одного вебсервиса.
Нужно всего-то передать методом 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.

Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Синапсис в помощь. В его примерах и https есть.
tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

alexs писал(а):Синапсис в помощь. В его примерах и https есть.

Пожалуйста, дайте ссылку на пример синапсиса с https... Нигде не нагуглил ничего :-(
Аватара пользователя
alexs
долгожитель
Сообщения: 4069
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

tema
постоялец
Сообщения: 376
Зарегистрирован: 24.03.2011 19:19:27

Сообщение tema »

alexs писал(а):http://www.webdelphi.ru/2011/07/biblioteka-synapse-rabota-s-modulem-httpsend-pas/

Спасибо!
Ответить