Lazarus+HTTPS+Post+XML

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

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

Lazarus+HTTPS+Post+XML

Сообщение tema » 11.12.2015 05:25:12

Хочу воспользоваться 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.

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

Re: Lazarus+HTTPS+Post+XML

Сообщение alexs » 11.12.2015 09:26:59

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

Re: Lazarus+HTTPS+Post+XML

Сообщение tema » 11.12.2015 10:27:09

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

Пожалуйста, дайте ссылку на пример синапсиса с https... Нигде не нагуглил ничего :-(
tema
постоялец
 
Сообщения: 376
Зарегистрирован: 24.03.2011 20:19:27

Re: Lazarus+HTTPS+Post+XML

Сообщение alexs » 11.12.2015 12:39:30

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

Re: Lazarus+HTTPS+Post+XML

Сообщение tema » 11.12.2015 22:52:16

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

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


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 245

Рейтинг@Mail.ru
cron