Guzzle无法向同一服务器发送web请求



目前我正在用PHP制作软件,该软件使用Guzzle发送web请求的IP地址。目前,我正在提出一个看起来像这样的请求:

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

应该返回的代码应该看起来像这个

$router->get('/temp/utils/transactions/callback', function (IlluminateHttpRequest $request)
{
IlluminateSupportFacadesLog::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());
}

总之,我真的不知道如何在没有真实世界测试的情况下解决这个问题,但我想在本地测试它,看看我收到了什么。

php -S视为单线程服务器。

来自文件:

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

因此,当Guzzle向同一服务器发送请求时,会导致所谓的死锁。原始请求和新请求都在等待对方。

因此,您不应该让脚本调用自己。您应该使用支持多线程的真实服务器,如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...

最新更新