【问题标题】:How can I make a http client request after another is completed?另一个完成后如何发出http客户端请求?
【发布时间】:2021-03-23 17:03:52
【问题描述】:

在我的 Symfony 函数中,我正在创建一个文件夹,并在该文件夹中创建另一个文件夹:

$client = HttpClient::create();

$createFolder = $client->request('MKCOL', $path.$foldername, [
'auth_basic' => [$user, $authKey],
]);


$createImageFolder = $client->request('MKCOL', $path.$foldername/images', [
'auth_basic' => [$user, $authKey],
]);

效果很好,但有时第一个文件夹创建速度不够快,无法创建图像文件夹。有没有办法让第二个请求可以等待,直到创建第一个文件夹?

【问题讨论】:

  • 你有没有一种方法可以在你尝试创建子文件夹之前检查文件夹是否存在?
  • @El_Vanja 是的,我可以做到。但如果该文件夹尚不存在,则不会创建子文件夹。你知道我的意思?那我还是有问题

标签: php symfony symfony-http-client


【解决方案1】:

来自Symfony HTTP Client docs

响应始终是异步的,因此对方法的调用会立即返回,而不是等待接收响应:

<?php
// code execution continues immediately; it doesn't wait to receive the response
$response = $client->request('GET', 'http://releases.ubuntu.com/18.04.2/ubuntu-18.04.2-desktop-amd64.iso');

// getting the response headers waits until they arrive
$contentType = $response->getHeaders()['content-type'][0];

// trying to get the response content will block the execution until
// the full response content is received
$content = $response->getContent();

因此,您需要致电$response-&gt;getContent()(或任何其他类似getHeaders())来阻止直到收到!

【讨论】:

    【解决方案2】:

    $client-&gt;request() 是异步的。您可以使用$client-&gt;getStatusCode() 等待响应,然后再进行下一个操作。您也可以使用它来确认第一次操作是否成功。

    $client = HttpClient::create();
    
    $createFolder = $client->request('MKCOL', $path.$foldername, [
        'auth_basic' => [$user, $authKey],
    ]);
    
    $code = $createFolder->getStatusCode();
    if ($code < 300) { // Creation was successful
        $createImageFolder = $client->request('MKCOL', $path.$foldername/images', [
            'auth_basic' => [$user, $authKey],
        ]);
    }
    

    【讨论】:

    • 谢谢,我测试了,我得到错误信息:Attempted to call an undefined method named "getStatusCode" of class "Symfony\Component\HttpClient\CurlHttpClient".
    • 啊,我想我得写$createFolder-&gt;getStatusCode();这个可以吗?
    • 是的,很抱歉。我刚刚修好了。
    • 我又查了一下,没有创建子文件夹,因为代码是201。这是什么意思?
    • @0stone0 这显然是上下文相关的。为此,可能 201 是要检查的正确代码。
    猜你喜欢
    • 2013-02-25
    • 2020-09-02
    • 1970-01-01
    • 2020-07-06
    • 2014-11-05
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多