mirror of
https://gitlab.com/freepascal.org/fpc/pas2js.git
synced 2025-09-16 16:49:15 +02:00
* Retrieve/send text bodies as string
This commit is contained in:
parent
61d004122d
commit
7d47b73170
@ -36,7 +36,9 @@ Type
|
|||||||
Url : String;
|
Url : String;
|
||||||
Method : String;
|
Method : String;
|
||||||
Headers : TStringDynArray;
|
Headers : TStringDynArray;
|
||||||
|
BodyIsString : Boolean;
|
||||||
Body : TJSArrayBuffer;
|
Body : TJSArrayBuffer;
|
||||||
|
BodyAsText : string;
|
||||||
Integrity : String;
|
Integrity : String;
|
||||||
Redirect: string;
|
Redirect: string;
|
||||||
Cache : String;
|
Cache : String;
|
||||||
@ -89,6 +91,7 @@ Type
|
|||||||
FNextRequestID : TWasmHTTPRequestID;
|
FNextRequestID : TWasmHTTPRequestID;
|
||||||
FLogApiCalls: Boolean;
|
FLogApiCalls: Boolean;
|
||||||
FRequests : TJSOBject;
|
FRequests : TJSOBject;
|
||||||
|
class function ContentTypeIsString(aType: String): boolean;
|
||||||
function ReadRequest(aRequest :PWasmHTTPRequest) : TWasmHTTPRequest;
|
function ReadRequest(aRequest :PWasmHTTPRequest) : TWasmHTTPRequest;
|
||||||
function RequestExecute(aRequestID: TWasmHTTPRequestID): TWasmHTTPResult;
|
function RequestExecute(aRequestID: TWasmHTTPRequestID): TWasmHTTPResult;
|
||||||
Protected
|
Protected
|
||||||
@ -117,6 +120,8 @@ Function CacheToString(aCache : Integer) : String;
|
|||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
uses strutils;
|
||||||
|
|
||||||
Const
|
Const
|
||||||
CacheNames : Array[0..5] of string = ('default','no-store','reload','no-cache','force-cache','only-if-cached');
|
CacheNames : Array[0..5] of string = ('default','no-store','reload','no-cache','force-cache','only-if-cached');
|
||||||
ModeNames : Array[0..4] of string = ('cors','same-origin','no-cors','navigate','websocket');
|
ModeNames : Array[0..4] of string = ('cors','same-origin','no-cors','navigate','websocket');
|
||||||
@ -260,7 +265,9 @@ begin
|
|||||||
MaybeInit('cache',Cache);
|
MaybeInit('cache',Cache);
|
||||||
MaybeInit('integrity',Integrity);
|
MaybeInit('integrity',Integrity);
|
||||||
if Assigned(Body) then
|
if Assigned(Body) then
|
||||||
lRequestInit['body']:=Body;
|
lRequestInit['body']:=Body
|
||||||
|
else if BodyIsString and (BodyAsText<>'') then
|
||||||
|
lRequestInit['body']:=BodyAsText;
|
||||||
if KeepAlive then
|
if KeepAlive then
|
||||||
lRequestInit['keepalive']:=KeepAlive;
|
lRequestInit['keepalive']:=KeepAlive;
|
||||||
MaybeInit('redirect',Redirect);
|
MaybeInit('redirect',Redirect);
|
||||||
@ -299,6 +306,18 @@ end;
|
|||||||
|
|
||||||
{ TWasmHTTPAPI }
|
{ TWasmHTTPAPI }
|
||||||
|
|
||||||
|
class function TWasmHTTPAPI.ContentTypeIsString(aType : String) : boolean;
|
||||||
|
|
||||||
|
begin
|
||||||
|
Result:=False;
|
||||||
|
aType:=LowerCase(ExtractWord(1,aType,';'));
|
||||||
|
case LowerCase(aType) of
|
||||||
|
'application/json',
|
||||||
|
'text/text',
|
||||||
|
'text/html' : Result:=True;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TWasmHTTPAPI.ReadRequest(aRequest: PWasmHTTPRequest): TWasmHTTPRequest;
|
function TWasmHTTPAPI.ReadRequest(aRequest: PWasmHTTPRequest): TWasmHTTPRequest;
|
||||||
|
|
||||||
Var
|
Var
|
||||||
@ -355,7 +374,7 @@ Var
|
|||||||
var
|
var
|
||||||
i : Integer;
|
i : Integer;
|
||||||
Hdrs : Longint;
|
Hdrs : Longint;
|
||||||
|
lHeader,lHeaderName,lHeaderValue : String;
|
||||||
begin
|
begin
|
||||||
v:=getModuleMemoryDataView;
|
v:=getModuleMemoryDataView;
|
||||||
P:=aRequest;
|
P:=aRequest;
|
||||||
@ -370,10 +389,18 @@ begin
|
|||||||
inc(P,SizeInt32);
|
inc(P,SizeInt32);
|
||||||
for I:=0 to HeaderCount-1 do
|
for I:=0 to HeaderCount-1 do
|
||||||
begin
|
begin
|
||||||
Result.Headers[i]:=GetStringFromAddr(Hdrs);
|
lHeader:=GetStringFromAddr(Hdrs);
|
||||||
|
Result.Headers[i]:=lHeader;
|
||||||
|
lHeaderName:=Trim(ExtractWord(1,lHeader,':'));
|
||||||
|
lHeaderValue:=Trim(ExtractWord(2,lHeader,':'));
|
||||||
|
if SameText(lheaderName,'Content-Type') then
|
||||||
|
Result.BodyIsString:=ContentTypeIsString(lHeaderValue);
|
||||||
inc(Hdrs,SizeInt32*2);
|
inc(Hdrs,SizeInt32*2);
|
||||||
end;
|
end;
|
||||||
Result.Body:=GetBuffer;
|
if Result.BodyIsString then
|
||||||
|
Result.BodyAsText:=GetString
|
||||||
|
else
|
||||||
|
Result.Body:=GetBuffer;
|
||||||
Result.Integrity:=GetString;
|
Result.Integrity:=GetString;
|
||||||
Result.Redirect:=RedirectToString(GetInt32);
|
Result.Redirect:=RedirectToString(GetInt32);
|
||||||
Result.Cache:=CacheToString(GetInt32);
|
Result.Cache:=CacheToString(GetInt32);
|
||||||
|
Loading…
Reference in New Issue
Block a user