silvioprog / brookframework

Microframework which helps to develop web Pascal applications.
https://github.com/risoflora/brookframework
GNU Lesser General Public License v3.0
170 stars 37 forks source link

Can't get POST request data #163

Closed Al-Muhandis closed 5 years ago

Al-Muhandis commented 5 years ago

Can't get POST request data.

procedure TWebhookAction.Post;
var
  Msg: String; 
begin
  PostData:=HttpRequest.Content; // PostData is empty string!
... ... ...

Legacy app 4.0.0 with tardigrade. Debian. Post data is not fields, that is string JSON Data. Before with THTTPDaemonBroker worked

silvioprog commented 5 years ago

Hello @Al-Muhandis . I'm not sure about you are using in the client-side, but it seems you just need to inform the content-type. For example, if you are using fphttpclient (FPC) or NetHTTPClient (Delphi), just:

YourClient.ContentType := 'application/json';
silvioprog commented 5 years ago

Additional info (that will be documented soon):

Al-Muhandis commented 5 years ago

Hello @Al-Muhandis . I'm not sure about you are using in the client-side, but it seems you just need to inform the content-type. For example, if you are using fphttpclient (FPC) or NetHTTPClient (Delphi), just:

YourClient.ContentType := 'application/json';
  1. Thank you, but I can not access the client, as it is a telegram server, and my webhook on my server, which listens to POST requests from the telegram API
  2. Yes, and the content type of the request it put up correctly. It is application/json. I had just checked.
Al-Muhandis commented 5 years ago

Additional info (that will be documented soon):

* `ARequest.IsPost` = check if the HTTP method is `POST`, `PUT`, `DELETE` or `OPTIONS`.

* `ARequest.IsUploading` = check if the client is sending data (HTML fields, payload data or uploaded files etc.) to the server.

The procedure I have is performed inside the POST method, so it is unlikely there will be another. But in any case, I don't know where is a ARequest? There is a property HTTPRequest in TBrookAction, and HTTPRequest which does not contain these functions

silvioprog commented 5 years ago

Could you test it outside the webhook using curl --header "Content-Type: application/json" --request POST --data '{"abc":123}' -w "\n" http://your-host:<your-port>? Just to check if the problem is related to Brook or the environment.

silvioprog commented 5 years ago

The procedure I have is performed inside the POST method, so it is unlikely there will be another.

Good news: you can use any HTTP method in the Tardigrade broker. :-)

But in any case, I don't know where is a ARequest?

They are available in the request object of Brook 5+, however, in legacy apps, you can debug to check if IsPost is returning True here.

I've tested all features before releasing v4.0.0, but I'll retest them again tonight.

Al-Muhandis commented 5 years ago

Could you test it outside the webhook using curl --header "Content-Type: application/json" --request POST --data '{"abc":123}' -w "\n" http://your-host:<your-port>? Just to check if the problem is related to Brook or the environment.

The same... Empty POST data in the request

silvioprog commented 5 years ago

Confirmed. I'm going to check it tonight and provide a patch fixing the problem. Thanks for reporting!

silvioprog commented 5 years ago

@Al-Muhandis , could you try this attached experimental patch? To apply it, download Brook here, the patch 0001 and 0002, so:

git apply 0001-Removes-redundant-configuration.patch
git apply 0002-Fix-issue-161-high-CPU-activity-in-Tardigrade-based-.patch
git apply 0003-Fix-issue-163-reported-by-Al-Muhandis.patch.txt

and rebuild your application again to test if it works.

It is experimental, but should work well.

0003-Fix-issue-163-reported-by-Al-Muhandis.patch.txt

Al-Muhandis commented 5 years ago

@Al-Muhandis , could you try this attached experimental patch? To apply it, download Brook here, the patch 0001 and 0002, so:

git apply 0001-Removes-redundant-configuration.patch
git apply 0002-Fix-issue-161-high-CPU-activity-in-Tardigrade-based-.patch
git apply 0003-Fix-issue-163-reported-by-Al-Muhandis.patch.txt

and rebuild your application again to test if it works.

It is experimental, but should work well.

0003-Fix-issue-163-reported-by-Al-Muhandis.patch.txt

Thank You very much! I applied the 2nd patch even earlier. 3rd patch just now. Now everything works!

Al-Muhandis commented 5 years ago

So now I can clarify that telegram plugin does not work with tardigrade broker without 3 patch for BF 4.0

silvioprog commented 5 years ago

Indeed. Tonight I'm going to do some tests and move this patch to here. :-)

silvioprog commented 5 years ago

Tonight I'm going to do some tests and move this patch to here.

Done! Thanks @Al-Muhandis ! :smiley: