codeigniter 使用Localhost时GuzzleHttp挂起

n3schb8v  于 2022-12-07  发布在  其他
关注(0)|答案(7)|浏览(125)

这是一个简单的代码片段,但这只是挂起和无响应。

$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的响应和大量的信息。

ftf50wuq

ftf50wuq1#

问题是当使用php artisan serve时,它使用的PHP服务器是single-threaded
Web服务器只运行一个单线程进程,因此如果请求被阻塞,PHP应用程序将停止。
您可以执行此操作solution
当调用自身时,线程阻塞等待自己的响应。解决方案是将提供应用程序和使用应用程序分离到各自的示例中,或者在多线程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);

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

xkftehaa

xkftehaa2#

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

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

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

qhhrdooz3#

最后解决了这个问题。如果你从非标准端口运行,Guzzle(或者CURL)会拒绝请求。
此外,这似乎是随机的,有时它的工作,有时它不。我搬到港口80和瞧,一切工作。

yi0zb3m4

yi0zb3m44#

您可以使用另一个端口运行另一个Web服务器示例,并将应用程序配置为在连接到API时使用此base_uri:
在另一个控制台中,php工匠服务器\默认为端口8000 \php工匠服务器--port=8001
请求(“获取”,“http://localhost:8001/api/tests”)

rkkpypqq

rkkpypqq5#

如果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']];
mgdq6dx1

mgdq6dx16#

connect_timeout设置为false对我的本地开发(Laravel)很有效,只是请求通过需要很长时间!

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

rggaifut7#

这个问题修复在我的结束。尝试这个-〉配置您的Laravel文件到IIS或XAMPP服务器,然后尝试通过您的本地IP地址运行,如(192. 168. X. X)。

相关问题