Pomme.Verte
Pomme.Verte

Reputation: 1792

Guzzle asynch request not working

I'm using Guzzle that I installed via composer and failing to do something relatively straightforward.

I might be misunderstanding the documentation but essentially what I'm wanting to do is run a POST request to a server and continue executing code without waiting for a response. Here's what I have :

$client = new \GuzzleHttp\Client(/*baseUrl, and auth credentials here*/);
$client->post('runtime/process-instances', [
    'future'=>true,
    'json'=> $data // is an array
]);
die("I'm done with the call");

Now lets say the runtime/process-instances runs for about 5mn, I will not get the die message before those 5mn are up... When instead I want it right after the message is sent to the server.

Now I don't have access to the server so I can't have the server respond before running the execution. I just need to ignore the response.

Any help is appreciated.

Things I've tried:

$client->post(/*blabla*/)->then(function ($response) {});

Upvotes: 4

Views: 2596

Answers (2)

Thomas
Thomas

Reputation: 429

It is not possible in Guzzle to send a request and immediately exit. Asynchronous requests require that you wait for them to complete. If you do not, the request will not get sent.

Also note that you are using post instead of postAsync, the former is a synchronous (blocking) request. To asynchronously send a post request, use the latter. In your code example, by changing post to postAsync the process will exit before the request is complete, but the target will not receive that request.

Upvotes: 3

OIS
OIS

Reputation: 10033

Have you tried setting a low timeout?

Upvotes: 0

Related Questions