为了账号安全,请及时绑定邮箱和手机立即绑定

Guzzle 无法向同一台服务器发送 Web 请求?

Guzzle 无法向同一台服务器发送 Web 请求?

PHP
芜湖不芜 2023-03-04 16:15:38
目前我正在用 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());}总之,如果没有真实世界的测试,我不太确定如何解决这个问题,但我想在本地进行测试,看看我收到了什么。
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

考虑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...


查看完整回答
反对 回复 2023-03-04
  • 1 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信