Guzzle无法将Web请求发送到同一服务器吗?

问题描述 投票:0回答:1

很抱歉,如果标题有点模糊,目前我正在用PHP开发软件,该软件使用Guzzle为其托管的IP发送Web请求。目前,我正在发出如下请求:

http://localhost:8000/temp/utils/transactions/callback?address=long_btc_address&balance=0&completed=0

应返回的代码应如下所示

$router->get('/temp/utils/transactions/callback', function (Illuminate\Http\Request $request)
{
   \Illuminate\Support\Facades\Log::info($request, 'Callback');
   return 'yo';
});

当前,该站点正在使用:

php -S localhost:8000 -t public

此外,发送此请求的代码如下所示:

$client = new Client();
$addy = decrypt($address->address);
$callback = $transaction->callback . "?address={$addy}&balance={$address->current_balance}&completed=0";
$res = $client->request('GET', $callback);
if ($res->getStatusCode() === 200) {
    return json_decode($res->getBody()->getContents());
}

[是的,这看起来确实很丑,所以可以随意整理一下哈哈。我还在这个项目中使用Laravel的Lumen。

总之,我不确定在没有实际测试的情况下如何解决此问题,但我想在本地进行测试并查看收到的内容。非常感谢您的帮助。

php laravel localhost lumen guzzle
1个回答
0
投票

考虑php -S作为单线程服务器。

documentation

Web服务器仅运行一个单线程进程,因此,如果请求被阻止,PHP应用程序将停顿。

因此,当Guzzle向同一服务器发送请求时,它会引起deadlock。原始请求和新请求都在等待。

因此,您不应自行调用脚本。您应该使用支持多线程的真实服务器,例如Apache或Nginx。

或我更喜欢的选项:您可以要求Laravel自称。类似于:

$req = Request::create($transaction->callback, 'GET',
    [
        'address' => $addy,
        'balance' => $address->current_balance,
        'completed' => 0,
    ]
);
$res = app()->handle($req); 

// deal with the response here...
© www.soinside.com 2019 - 2024. All rights reserved.