3

I need help in following situation: I have to send POST requests to an API endpoint, which can handle requests simultaneous. But takes time for each. To reduce time, I want to send multiple POST request at a time.

Here are some code fragments:

use GuzzleHttp\Pool as GuzzlePool;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\Psr7\Request as GuzzleRequest;

[...]

foreach ($aRequestParams as $sRequestParam) {
    $aRequestList[] = new GuzzleRequest('POST', $sRoute,
    [
//    'form_params' => [
//         'jsonString' => $sRequestParam
//      ]
        'body' =>  $sRequestParam
//      'multipart' => [
//           [
//               'name' => 'jsonString',
//               'contents' => $sRequestParam
//           ]
//       ]
     ]
     );
}
$oGuzzlePool = new GuzzlePool(new GuzzleClient(), $aRequestList, [
    'concurrency' => 8,
    'fulfilled' => [$this, 'processFulfilledCallback'],
    'rejected' => [$this, 'processRejectedCallback']
]);

$oPromise = $oGuzzlePool->promise();
$oPromise->wait();

The callback functions are called after request, but there is the POST payload missing. How do I have to configure the GuzzleRequest?

Glueckstiger
  • 107
  • 1
  • 7

1 Answers1

0

I use this code and it seems to work:

    $oGuzzleClient = new GuzzleClient();
    $aRequestList = function() use ($oGuzzleClient, $aRequestParams, $sRoute) {
                    foreach ($aRequestParams as $sRequestParam) {
                        yield function() use ($oGuzzleClient, $sRequestParam, $sRoute) {
                            return $oGuzzleClient->postAsync($sRoute, [
                                'form_params' => [
                                    'jsonString' => $sRequestParam
                                ]
                            ]);
                        };
                    }
                };
$oGuzzlePool = new GuzzlePool($oGuzzleClient, $aRequestList(), [
Glueckstiger
  • 107
  • 1
  • 7