当前位置: 首页 > 知识库问答 >
问题:

Guzzle无法向本地主机发出GET请求(端口:80、8000、8080等)

欧阳洲
2023-03-14

目前使用Laravel 5.5和大嘴,与laravel安装程序一起。

我试图发出GET请求(其他HTTP请求也会出错),但似乎不起作用。

此代码不起作用:

public function callback(Request $request)
{
    $code = $request->code;

    $client = new Client(['exceptions' => false]);

    try {
      $response = $client->request('GET', 'http://localhost/api/tests');
        // $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
        //     'form_params' => [
        //         'grant_type' => 'authorization_code',
        //         'client_id' => Config::get('oauth_client.client_id'),
        //         'client_secret' => Config::get('oauth_client.client_secret'),
        //         'redirect_uri' => Config::get('oauth_client.redirect_uri'),
        //         'code' => $code,
        //     ],
        // ]);
        // return json_decode((string) $response->getBody(), true);
    } catch (\Exception $e) {
        dd($e);
    }
    dd($response->getBody());
    return;
}

但是下面的代码工作得非常好

public function callback(Request $request)
{
    $code = $request->code;

    $client = new Client(['exceptions' => false]);

    try {
      $response = $client->request('GET', 'https://www.google.co.id');
        // $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
        //     'form_params' => [
        //         'grant_type' => 'authorization_code',
        //         'client_id' => Config::get('oauth_client.client_id'),
        //         'client_secret' => Config::get('oauth_client.client_secret'),
        //         'redirect_uri' => Config::get('oauth_client.redirect_uri'),
        //         'code' => $code,
        //     ],
        // ]);
        // return json_decode((string) $response->getBody(), true);
    } catch (\Exception $e) {
        dd($e);
    }
    dd($response->getBody());
    return;
}

我不明白为什么我的古斯能够请求google.com但无法连接到我自己的localhost服务器(到所有端口)。

任何帮助都将不胜感激。

谢谢

共有3个答案

陆甫
2023-03-14

设置'CURLOPT_SSL_VERIFYPEER'选项为false

public function callback(Request $request)
{
    $code = $request->code;

    $client = new Client(['exceptions' => false, 'CURLOPT_SSL_VERIFYPEER' => false]);

    try {
      $response = $client->request('GET', 'http://localhost/api/tests');
        // $response = $http->request('POST', Config::get('app.url') . '/oauth/token', [
        //     'form_params' => [
        //         'grant_type' => 'authorization_code',
        //         'client_id' => Config::get('oauth_client.client_id'),
        //         'client_secret' => Config::get('oauth_client.client_secret'),
        //         'redirect_uri' => Config::get('oauth_client.redirect_uri'),
        //         'code' => $code,
        //     ],
        // ]);
        // return json_decode((string) $response->getBody(), true);
    } catch (\Exception $e) {
        dd($e);
    }
    dd($response->getBody());
    return;
}
巢嘉志
2023-03-14

在我的开发服务器上使用Apache2和虚拟主机解决了这个问题,这种方法比在Guzzle参数上做任何更改都更现实。

因此,我的结论是最好使用真正的web服务器(Nginx、Apache)而不是artisan服务。

范浩荡
2023-03-14

它不起作用的原因是php artisan serve使用php内置web服务器,这是单线程的。因此,如果您运行应用程序,在完成初始请求之前,它无法发出另一个请求(您的Guzzle请求)。这就是它挂起的原因(如本文所述)。

一种解决方案是(正如您所指出的)使用真正的多线程Web服务器。

但是,如果您仍然想使用php artisan serve而不是像Nginx这样的web服务器,那么有一个简单的解决方案(我已经在另一期中发布了):

您可以使用另一个端口运行另一个web服务器实例,并将应用程序配置为在连接到API时使用此base\u uri

php artisan serve \\ defaults to port 8000
\\ in another console
php artisan serve --port=8001
$client->request('GET', 'http://localhost:8001/api/tests')
 类似资料:
  • 我试图从比特币市场RESTful API中获取不同的JSON。 问题是:我只能将单个GET请求逐个发送到API,因此我无法同时从所有比特币市场获取所有数据。 有没有办法使用Python线程(每个线程使用不同的客户端端口发送GET请求)同时获取多个数据?

  • 问题内容: 我将后端API与使用它的前端HTML5应用程序分开作为一个单独的项目。我正在使用Yeoman进行前端开发。Yeoman在localhost:3501上运行,后端在localhost:3000上运行。当我从浏览器发出API请求时(使用AngularJS的$ http),我遇到了相同的原始策略: AFAIK,仅当在不同域中发出请求时,才应启动相同的来源策略。当我们从本地主机到本地主机(尽管

  • 你好,朋友,我是一个新的flutter当我尝试在本地主机上发出http请求时,我得到了这个错误 E/Flutter(8392):[错误:Flutter/lib/ui/ui_dart_state.cc(157)]未处理异常:SocketException:OS错误:连接被拒绝,错误号=111,地址=127.0.0.1,端口=33200我正在本地主机上使用http pacakge与laravel应用程

  • 在ubunutu 14.04上安装tomcat7,使用 sudo apt-get install tomcat7 正在启动Tomcat servlet引擎tomcat7[OK] 但是我在本地主机上没有得到任何东西:8080 我也尝试更改默认端口,但不起作用。

  • 本文向大家介绍Mac中使用Nginx实现80端口转发8080端口,包括了Mac中使用Nginx实现80端口转发8080端口的使用技巧和注意事项,需要的朋友参考一下 由于项目本身的原因,开发必须使用80端口实现,而在Unix内核中非Root用户无法直接使用1024以下的端口,最初作者找到了pfctl的方式实现80端口转发到8080端口实现访问,经过亲测出现了最为严重的问题,按照当时的方法配置好之后发