使用Guzzle通过Symfony将HTTP GET连接到外部API

时间:2017-01-23 23:27:40

标签: php http symfony guzzle

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

我编写了以下代码以使用Guzzle来HTTP GET从我的外部API获取一组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 GuzzleHttp\Client;的使用声明我做错了什么?有更简单的方法吗?

2 个答案:

答案 0 :(得分:2)

这一行: $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”的原因。

答案 1 :(得分:1)

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

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