Pārlūkot izejas kodu

* Fix headers namevalueseparator and request content body.

git-svn-id: trunk@30834 -
michael 10 gadi atpakaļ
vecāks
revīzija
d41afe1a0c
1 mainītis faili ar 13 papildinājumiem un 7 dzēšanām
  1. 13 7
      packages/fcl-web/src/base/fphttpwebclient.pp

+ 13 - 7
packages/fcl-web/src/base/fphttpwebclient.pp

@@ -29,6 +29,7 @@ Type
   Private
   Private
     FHTTP : TFPHTTPClient;
     FHTTP : TFPHTTPClient;
   Public
   Public
+    function GetHeaders: TStrings;override;
     Constructor Create(AHTTP : TFPHTTPClient);
     Constructor Create(AHTTP : TFPHTTPClient);
     Destructor Destroy; override;
     Destructor Destroy; override;
   end;
   end;
@@ -44,7 +45,6 @@ Type
     Function GetStatusText : String; override;
     Function GetStatusText : String; override;
   Public
   Public
     Constructor Create(AHTTP : TFPHTTPRequest);
     Constructor Create(AHTTP : TFPHTTPRequest);
-    Destructor Destroy; override;
   end;
   end;
 
 
   { TFPHTTPWebClient }
   { TFPHTTPWebClient }
@@ -61,6 +61,10 @@ uses dateutils;
 
 
 { TFPHTTPRequest }
 { TFPHTTPRequest }
 
 
+function TFPHTTPRequest.GetHeaders: TStrings;
+begin
+  Result:=FHTTP.RequestHeaders;
+end;
 
 
 constructor TFPHTTPRequest.Create(AHTTP: TFPHTTPClient);
 constructor TFPHTTPRequest.Create(AHTTP: TFPHTTPClient);
 begin
 begin
@@ -105,17 +109,13 @@ begin
   FHTTP:=AHTTP.FHTTP;
   FHTTP:=AHTTP.FHTTP;
 end;
 end;
 
 
-Destructor TFPHTTPResponse.Destroy;
-begin
-  FreeAndNil(FHTTP);
-  inherited Destroy;
-end;
 
 
 { TFPHTTPWebClient }
 { TFPHTTPWebClient }
 
 
 Function TFPHTTPWebClient.DoCreateRequest: TWebClientRequest;
 Function TFPHTTPWebClient.DoCreateRequest: TWebClientRequest;
 begin
 begin
   Result:=TFPHTTPRequest.Create(TFPHTTPClient.Create(Self));
   Result:=TFPHTTPRequest.Create(TFPHTTPClient.Create(Self));
+  Result.Headers.NameValueSeparator:=':';
 end;
 end;
 
 
 Function TFPHTTPWebClient.DoHTTPMethod(Const AMethod, AURL: String;
 Function TFPHTTPWebClient.DoHTTPMethod(Const AMethod, AURL: String;
@@ -129,7 +129,6 @@ Var
 begin
 begin
   U:=AURL;
   U:=AURL;
   H:=TFPHTTPRequest(ARequest).FHTTP;
   H:=TFPHTTPRequest(ARequest).FHTTP;
-  TFPHTTPRequest(ARequest).FHTTP:=Nil;
   S:=ARequest.ParamsAsQuery;
   S:=ARequest.ParamsAsQuery;
   if (S<>'') then
   if (S<>'') then
     begin
     begin
@@ -139,6 +138,13 @@ begin
     end;
     end;
   Result:=TFPHTTPResponse.Create(ARequest as TFPHTTPRequest);
   Result:=TFPHTTPResponse.Create(ARequest as TFPHTTPRequest);
   try
   try
+    if Assigned(ARequest.Content) and (ARequest.Headers.IndexOfName('Content-length')<0) then
+      H.AddHeader('Content-length',IntToStr(ARequest.Content.size));
+    if ARequest.Content.Size>0 then
+      begin
+      H.RequestBody:=ARequest.Content;
+      H.RequestBody.Position:=0;
+      end;
     H.HTTPMethod(AMethod,U,Result.Content,[]); // Will rais an exception
     H.HTTPMethod(AMethod,U,Result.Content,[]); // Will rais an exception
   except
   except
     FreeAndNil(Result);
     FreeAndNil(Result);