学习如何使用Guzzle从API访问数据

时间:2015-10-14 06:14:13

标签: php api laravel laravel-5.1 guzzle

我正在构建一个需要使用API​​的新应用程序,特别是一个使用OAuth的应用程序,但首先我尝试使用一个简单的API来解决如何使用在应用程序中使用一个,因为我之前从未使用过API。

我在安装了Guzzle库的本地主机上运行了一个新的Laravel 5.1项目。

按照Guzzle documentation的说明,我相信我已将此设置正确,但我无法对我得到的回复做出反应。

我尝试使用的API为http://freegeoip.net/,请求的格式为freegeoip.net/{format}/{IP_or_hostname}

我已经设置了一个页面,我可以输入一个IP地址并提交,然后由我的控制器中的以下函数运行它:

public function retrieve(Request $request)
    {
        $url = "http://freegeoip.net/json/" . $request->ipaddress;
        $client = new Client();
        $response = $client->request('GET', $url);
        dd($response);
    }

我的路线和所有设置都正确设置,我在控制器的顶部引用了Guzzle:

use GuzzleHttp\Client;

但是我从dd($response);得到的回复对我没有任何意义,或者对如何从中获取任何信息给出任何暗示。

这是dd($response)输出

的内容
Response {#195 ▼
  -reasonPhrase: "OK"
  -statusCode: 200
  -headers: array:8 [▶]
  -headerLines: array:8 [▶]
  -protocol: "1.1"
  -stream: Stream {#186 ▶}
}

但是当我通过浏览器运行等效的网址时,我得到了

{"ip":"202.21.xxx.xxx","country_code":"NZ","country_name":"New Zealand","region_code":"WGN","region_name":"Wellington","city":"Wellington","zip_code":"6011","time_zone":"Pacific/Auckland","latitude":-41.283,"longitude":174.784,"metro_code":0}

任何人都可以帮助解决我做错的事情,或者指出一些有关如何开始使用Laravel API的好资源。关于如何构建Laravel API而不是如何从Laravel访问它们的方法很多。

1 个答案:

答案 0 :(得分:2)

经过大量的挖掘后,我发现我只是遗漏了json_decode()

我运行时请求正常:

public function retrieve(Request $request)
    {
        $url = "http://freegeoip.net/json/" . $request->ipaddress;
        $client = new Client();
        $response = $client->request('GET', $url);
        dd(json_decode($response->getBody()));
    }

为将来遇到此类问题的其他人解答此问题:)。