学习如何使用 Guzzle 从 API 访问数据
Learning how to access data from an API using 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 ▶}
}
但是当我通过浏览器 运行 等效的 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}
任何人都可以帮助解决我做错的事情,或者指出一些关于如何开始使用 APIs 和 Laravel 的好资源。关于如何构建 Laravel API 有很多内容,但没有关于如何从 Laravel.
访问的内容
好吧,经过大量的挖掘,结果证明我只是错过了 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()));
}
为以后遇到此类问题的任何人回答此问题:)。
我正在构建一个需要使用 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 ▶}
}
但是当我通过浏览器 运行 等效的 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}
任何人都可以帮助解决我做错的事情,或者指出一些关于如何开始使用 APIs 和 Laravel 的好资源。关于如何构建 Laravel API 有很多内容,但没有关于如何从 Laravel.
访问的内容好吧,经过大量的挖掘,结果证明我只是错过了 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()));
}
为以后遇到此类问题的任何人回答此问题:)。