使用 Guzzle 通过 Symfony 将 HTTP GET 发送到外部 API

Use Guzzle to HTTP GET to external API with Symfony

我是 Symfony 开发的新手,如果这是一个愚蠢的问题,请原谅。我正在尝试从外部 API 获取 JSON 数据。我已经尝试通过 Postman 运行 GET 请求并获得 JSON 格式的正确数据,所以我知道我的 URL 是正确的。

我编写了以下代码以使用 Guzzle 从我的外部 API HTTP 获取一组 JSON 数据:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use Psr\Http\Message\ResponseInterface;
use GuzzleHttp\Client;

class ScheduleController {

/**
 * @Route("/schedule")
 */

public function getJobs() {
    // Create a client with a base URI
    $client = new GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);
    // Send a request to http://my.api.url/site/67/module/1449/item
    $response = $client->request('GET', 'site/67/module/1449/item');
    dump($response);
}
}

我正在尝试尽可能地跟进 the Guzzle quick start guide. 我从这段代码中收到了 500 错误: Attempted to load class "Client" from namespace "AppBundle\Controller\GuzzleHttp". Did you forget a "use" statement for e.g. "Symfony\Component\BrowserKit\Client", "Symfony\Component\HttpKernel\Client" or "Symfony\Bundle\FrameworkBundle\Client"?

我有一个 use 语句 use GuzzleHttp\Client; 我做错了什么?有更简单的方法吗?

这一行: $client = new GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);

应该是:

$client = new Client(['base_uri' => 'http://my.api.url/']);

或:

$client = new \GuzzleHttp\Client(['base_uri' => 'http://my.api.url/']);

自从您导入命名空间后,任何一个都可以工作。您可能想要第一个选项。当你把 GuzzleHttp\Client PHP 认为它是一个相对命名空间时,这就是为什么它说 "AppBundle\Controller\GuzzleHttp\Client" 找不到。

我将 IP 地址从 localhost:8087 设置为我的 windows IP 地址 192.168.x.x:8087

它起作用了,所以不需要对 linux ports/docker 端口等做任何事情