如何发布Guzzle 6异步数据



i尝试使用Guzzle 6(最新版本)将数据发布为异步

    $client = new Client();
    $request = $client->postAsync($url, [
        'json' => [
                'company_name' => 'update Name'
        ],
    ]);

但我没有收到任何来自Guzzle的请求,就像在终端上发布请求一样

因为它是promise,,所以需要放置then

除非你放入$promise->wait() ,否则承诺不会被调用

这是一个基于您的问题使用postAsync的简单帖子请求:

$client = new Client();
$promise = $client->postAsync($url, [
    'json' => [
            'company_name' => 'update Name'
    ],
])->then(
    function (ResponseInterface $res){
        $response = json_decode($res->getBody()->getContents());
        return $response;
    },
    function (RequestException $e) {
        $response = [];
        $response->data = $e->getMessage();
        return $response;
    }
);
$response = $promise->wait();
echo json_encode($response);

您尝试发送请求了吗?

http://guzzle.readthedocs.org/en/latest/index.html?highlight=async

$client = new Client();
$request = new Request('POST', $url, [
    "json" => [
        'company_name' => 'update Name']
    ]);
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});
$promise->wait();

Guzzle6几乎没有可供开发人员参考的实用示例/文档。我正在分享一个关于如何使用postAsync和Pool对象的示例。这允许使用guzzle6并发异步请求。(我找不到一个直接的例子,花了2天时间获得工作代码)

function postInBulk($inputs)
{
    $client = new Client([
        'base_uri' => 'https://a.b.com'
    ]);
    $headers = [
        'Authorization' => 'Bearer token_from_directus_user'
    ];
    $requests = function ($a) use ($client, $headers) {
        for ($i = 0; $i < count($a); $i++) {
            yield function() use ($client, $headers) {
                return $client->postAsync('https://a.com/project/items/collection', [
                    'headers' => $headers,
                    'json' => [
                        "snippet" => "snippet",
                        "rank" => "1",
                        "status" => "published"
                    ]        
                ]);
            };
        }
        
    };
    $pool = new Pool($client, $requests($inputs),[
        'concurrency' => 5,
        'fulfilled' => function (Response $response, $index) {
            // this is delivered each successful response
        },
        'rejected' => function (RequestException $reason, $index) {
            // this is delivered each failed request
        },
    ]);
    $pool->promise()->wait();
}

您很可能需要调用wait();

$request->wait();

最新更新