[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