On Tue, 3 Jan 2023, duilio foschi via fpc-pascal wrote:
I would like to write some code where a TFPHttpClient component sends a minimal json payload to a TFPHttpServer that (reads the payload). The working of the TFPHttpClient component is clear enough, while its counterpart TFPHttpServer proves rather obscure to me. TFPHttpClient =========== Page https://wiki.freepascal.org/fphttpclient contains complete and clear code: var Client: TFPHttpClient; Response: TStringStream; Params: string = '{"Name": "John", "Age": 32}'; begin Client := TFPHttpClient.Create(nil); Client.AddHeader('User-Agent', 'Mozilla/5.0 (compatible; fpweb)'); Client.AddHeader('Content-Type', 'application/json; charset=UTF-8'); Client.AddHeader('Accept', 'application/json'); Client.AllowRedirect := true; Client.UserName := USER_STRING; Client.Password := PASSW_STRING; Client.RequestBody := TRawByteStringStream.Create(Params); Response := TStringStream.Create(''); try try Client.Post(TheURL, Response); Writeln('Response Code: ' + IntToStr(Client.ResponseStatusCode)); // better be 200 except on E: Exception do Writeln('Something bad happened: ' + E.Message); end; finally Client.RequestBody.Free; Client.Free; Response.Free; end; I reckon I need to set - say- TheURL:='http://localhost:9200'; here TFPHTTPServer ============= say we use TTestHTTPServer=class(TFPHTTPServer); for our server, I understand that all action takes place inside procedure DataModuleRequest (so far so good): procedure TTestHTTPServer.DataModuleRequest(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean); begin // end; Q1: how can I create an object of type jsondata from ARequest?
include fpjson and jsonparser units in your uses clause. Then do JSON :=GetJSON(aRequest.Content);
Q2: can I get a UTF8 string from ARequest?
Yes, aRequest.Content is a string.
Q3: TFPHTTPServer has property Port. I reckon it will be set to 9200 here. Is it correct?
Yes.
Q4: TFPHTTPServer has property Address. I reckon it will be set to 'localhost' here. Is it correct?
It depends on what you want. Best is to leave it empty.
Q5: TFPHTTPServer has no property Username and Password. How do I check the values I set in the corresponding properties of TFPHTTPClient?
aRequest.Authorization will be a string of the form Basic NNNNNNN Where NNNNN is a base64 encoded string with username:password in it. So you must decode the string (see bas64 unit) and split the resulting string in username and password.
Q6: what is the use of parameter Handled?
If Handled is false, then an error will be sent to the client. You should set Handled to true. Michael. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal