使用Localhost时GuzzleHttp挂起

spr*_*man 7 php rest codeigniter guzzle

这是一个简单的代码snipplet,但这只是挂起和反应迟钝.

    $httpClient = new GuzzleHttp\Client(); // version 6.x

    $headers = ['X-API-KEY' => '123456'];

    $request = $httpClient->request('GET', 'http://localhost:8000/BlogApiV1/BlogApi/blogs/', $headers);
    $response = $client->send($request, ['timeout' => 2]);

    echo $request->getStatusCode();
    echo $request->getHeader('content-type');
    echo $request->getBody();
    die();
Run Code Online (Sandbox Code Playgroud)

任何指针都非常赞赏.当我使用我的用户名和密码尝试使用github api时,我得到了200响应和大量信息.

bus*_*ing 21

问题是在使用时php artisan serve,它使用的是单线程的 PHP 服务器。

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

您可以执行此解决方案

当调用自己时,线程被阻塞,等待自己的回复。解决方案是将提供应用程序和消费应用程序分离到它们自己的实例中,或者在多线程 Web 服务器(例如 Apache 或 nginx)上运行它。

或者,如果您正在寻找快速修复来测试您的更新 - 您可以通过打开两个命令提示符来完成此操作。第一个将运行php artisan serve(本地我的默认端口是 8000,您将在 上运行您的站点http://localhost:8000)。第二个会运行php artisan serve --port 8001

然后,您将发布请求更新为:

$request = $httpClient->request('GET', 'http://localhost:8001/BlogApiV1/BlogApi/blogs/', $headers);
Run Code Online (Sandbox Code Playgroud)

这应该在您的测试期间有所帮助,直到您能够将所有内容都放在服务器或本地虚拟主机上。

  • 是的,这正是我所面临的 (2认同)
  • 非常好的解决方案,我也做了同样的事情。 (2认同)

Cod*_*er1 4

我也有同样的问题。base_uri我通过如下定义解决了这个问题。

$client = new \GuzzleHttp\Client([
    'base_uri' => 'http://localhost:8000',
    'defaults' => [
        'exceptions' => false
    ]
]);

$response = $client->get('/api/user/1');
Run Code Online (Sandbox Code Playgroud)