[fpc-pascal] TFPHttpClient & TFPHttpServer
duilio foschi
octopushole at gmail.com
Wed Jan 4 01:12:46 CET 2023
Now everything is clear.
Thank you
Peppe
Il Mar 3 Gen 2023 22:59 Michael Van Canneyt via fpc-pascal <
fpc-pascal at lists.freepascal.org> ha scritto:
>
>
> 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 at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20230104/078d97ad/attachment.htm>
More information about the fpc-pascal
mailing list