lazarus/components/googleapis/2_6_4/synapsewebclient.pp
michael 7a2e9badfb * Instructions for compilation with 2.6.4
git-svn-id: trunk@48979 -
2015-05-09 15:25:35 +00:00

175 lines
3.5 KiB
ObjectPascal

unit synapsewebclient;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, fpwebclient, httpsend;
Type
{ TSynapseRequest }
TSynapseRequest = Class(TWebClientRequest)
Private
FHTTP : THTTPSend;
Protected
function GetHeaders: TStrings;override;
function GetStream: TStream;override;
Public
Constructor Create(AHTTP : THTTPSend);
Destructor Destroy; override;
end;
{ TSynapseResponse }
TSynapseResponse = Class(TWebClientResponse)
Private
FHTTP : THTTPSend;
Protected
function GetHeaders: TStrings;override;
function GetStream: TStream;override;
Function GetStatusCode : Integer; override;
Function GetStatusText : String; override;
Public
Constructor Create(ARequest : TWebClientRequest); override;
Destructor Destroy; override;
end;
{ TSynapseWebClient }
TSynapseWebClient = Class(TAbstractWebClient)
Protected
Function DoCreateRequest: TWebClientRequest; override;
Function DoHTTPMethod(Const AMethod,AURL : String; ARequest : TWebClientRequest) : TWebClientResponse; override;
end;
implementation
{ TSynapseRequest }
function TSynapseRequest.GetHeaders: TStrings;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Headers
else
Result:=Inherited GetHeaders;
end;
function TSynapseRequest.GetStream: TStream;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Document
else
Result:=Inherited GetStream;
end;
Constructor TSynapseRequest.Create(AHTTP: THTTPSend);
begin
FHTTP:=AHTTP;
end;
Destructor TSynapseRequest.Destroy;
begin
FreeAndNil(FHTTP);
inherited Destroy;
end;
{ TSynapseResponse }
function TSynapseResponse.GetHeaders: TStrings;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Headers
else
Result:=Inherited GetHeaders;
end;
function TSynapseResponse.GetStream: TStream;
begin
if Assigned(FHTTP) then
Result:=FHTTP.Document
else
Result:=Inherited GetStream;
end;
Function TSynapseResponse.GetStatusCode: Integer;
begin
if Assigned(FHTTP) then
Result:=FHTTP.ResultCode
else
Result:=0;
end;
Function TSynapseResponse.GetStatusText: String;
begin
if Assigned(FHTTP) then
Result:=FHTTP.ResultString
else
Result:='';
end;
Constructor TSynapseResponse.Create(ARequest : TWebClientRequest);
begin
Inherited Create(ARequest);
FHTTP:=(ARequest as TSynapseRequest).FHTTP;
end;
Destructor TSynapseResponse.Destroy;
begin
FreeAndNil(FHTTP);
inherited Destroy;
end;
{ TSynapseWebClient }
Function TSynapseWebClient.DoCreateRequest: TWebClientRequest;
begin
Result:=TSynapseRequest.Create(THTTPSend.Create);
end;
Function TSynapseWebClient.DoHTTPMethod(Const AMethod, AURL: String;
ARequest: TWebClientRequest): TWebClientResponse;
Var
U,S : String;
I : Integer;
h : THTTPSend;
begin
U:=AURL;
H:=TSynapseRequest(ARequest).FHTTP;
S:=ARequest.ParamsAsQuery;
if (S<>'') then
begin
if Pos('?',U)=0 then
U:=U+'?';
U:=U+S;
end;
I:=H.Headers.IndexOfName('Content-type');
if I<>-1 then
begin
H.MimeType:=H.Headers.Values['Content-type'];
H.Headers.Delete(I);
end;
if Not H.HTTPMethod(AMethod,U) then
begin
H.Document.Clear;
H.Headers.Clear;
H.Cookies.Clear;
With H.Sock do
Raise EFPWebClient.CreateFmt('HTTP Request failed (%d : %s)',[LastError,LastErrorDesc]);
end
else
begin
Result:=TSynapseResponse.Create(ARequest);
if Assigned(ARequest.ResponseContent) then
ARequest.ResponseContent.CopyFrom(ARequest.Content,0);
TSynapseRequest(ARequest).FHTTP:=Nil;
end;
end;
end.