使用Localhost时GuzzleHttp挂起

时间:2016-04-29 21:39:06

标签: php codeigniter rest 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();

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

6 个答案:

答案 0 :(得分:3)

终于解决了。如果您从非标准端口运行,则Guzzle(或特定于CURL)拒绝请求。

此外,这似乎是随机的,有时它可以工作,有时则不然。我搬到80号港口,Voila一切顺利。

答案 1 :(得分:1)

我遇到了同样的问题。我通过如下定义base_uri来解决这个问题。

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

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

答案 2 :(得分:1)

问题是使用php artisan serve时,它使用的是single-threaded的PHP服务器。

  

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

您可以这样做solution

  

在对其自身进行调用时,线程将阻塞以等待其自己的回复。解决方案是将提供的应用程序和使用的应用程序分离到各自的实例中,或者在诸如Apache或nginx的多线程Web服务器上运行它。

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

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

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

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

答案 3 :(得分:0)

如果http://localhost:8000/BlogApiV1/BlogApi/blogs的脚本效果很好,我打赌它X-API-KEY没有被发送。

如果您查看文档(http://docs.guzzlephp.org/en/latest/request-options.html#headers),您似乎会对选项数组格式错误。

应该是

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

答案 4 :(得分:0)

connect_timeout设置为false有助于我进行本地开发(Laravel),处理请求的时间很长!

$client = new Client([
    'connect_timeout' => false,
    'timeout'         => 30.0, // set higher if timeout still happens
]);

答案 5 :(得分:0)

此问题我已已修复。 尝试执行此操作->将Laravel文件配置到IIS或XAMPP服务器中,然后尝试通过本地IP地址(例如(192.168.X.X))运行。