GuzzleHttp 在使用本地主机时挂起

2022-08-31 00:37:19

这是一个简单的代码片段,但这只是挂起并且没有响应。

    $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();

任何指点都非常感谢。当我使用我的用户名和密码尝试使用github api时,我确实得到了200响应和大量信息。


答案 1

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

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

您可以执行此解决方案

当调用自身时,线程被阻止,等待自己的回复。解决方案是要么将提供应用程序和使用应用程序分离到自己的实例中,要么在Apache或nginx等多线程Web服务器上运行它。

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

然后,您将帖子请求更新为:

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

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


答案 2

我遇到了同样的问题。我通过定义如下来绕过它。base_uri

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

$response = $client->get('/api/user/1');

推荐