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

Posted

技术标签:

【中文标题】学习如何使用 Guzzle 从 API 访问数据【英文标题】:Learning how to access data from an API using Guzzle 【发布时间】:2016-01-12 02:27:47 【问题描述】:

我正在构建一个需要使用 API 的新应用程序,尤其是使用 OAuth 的应用程序,但首先我尝试使用一个简单的 API 来了解如何在应用程序,因为我以前从未使用过 API。

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

按照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 ▶

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

"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 访问 API。

【问题讨论】:

【参考方案1】:

经过大量挖掘,我发现我只是想念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()));
    

为以后遇到此类问题的其他人回答这个问题:)。

【讨论】:

以上是关于学习如何使用 Guzzle 从 API 访问数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Guzzle 进行分页

Guzzlehttp - 如何从 Guzzle 6 获取响应的正文?

从 Guzzle 中捕获异常

如何在不使用 curl 和 guzzle 的情况下从控制器 Laravel 调用 API,因为它不起作用 [关闭]

如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值

将 JSON 数据从 API 转换为数组并在 Laravel 和 Guzzle HTTP Client 中分别显示?