使用 Laravel 从 API 获取 JSON 响应
Posted
技术标签:
【中文标题】使用 Laravel 从 API 获取 JSON 响应【英文标题】:Getting the JSON reponse from an API with Laravel 【发布时间】:2014-09-16 03:32:40 【问题描述】:我只是在搞乱 API,现在我正尝试在我的应用程序中使用 Google Directions API。
我制作了一个表单来获取用户的输入并检索此数据并在 routes.php
文件中创建 URI:
Route::get('/directions', function()
$origin = Input::get('origin');
$destination = Input::get('destination');
$url = "http://maps.googleapis.com/maps/api/directions/json?origin=" . $origin . "&destination=" . $destination . "&sensor=false";
);
该 URL 的响应是 JSON。但是现在,我应该如何使用 Laravel 存储该响应?我一直在查看 Laravel 中的 Http 命名空间,但没有找到方法。如果用 Laravel 做不到,那么用普通的 php 怎么做呢?
【问题讨论】:
【参考方案1】:你可以试试这个步骤...
设置路线...
Route::get('/json', [yourController::class, 'getJSON']);
以及获取json格式值的方法
public function getJSON(Request $request)
$url = 'https://api******';
$response = file_get_contents($url);
$newsData = json_decode($response);
return response()->json($newsData);
【讨论】:
@JaredSmith 指出 response->json() 证明了这一点,这也是搜索 laravel json api 时的第一个结果,所以问题的年龄无关紧要【参考方案2】:看看我的包裹
https://github.com/joshhornby/Http
希望 API 的调用更容易一些
【讨论】:
我去看看,看起来不错。我希望 Laravel 实现这样的东西。 “看看我的包裹”你是故意的还是无意的?【参考方案3】:您可以使用file_get_contents()
Route::get('/directions', function()
$origin = Input::get('origin');
$destination = Input::get('destination');
$url = urlencode ("http://maps.googleapis.com/maps/api/directions/json?origin=" . $origin . "&destination=" . $destination . "&sensor=false");
$json = json_decode(file_get_contents($url), true);
dd($json);
);
【讨论】:
谢谢,这更接近我想要的。但是,1:laravel 没有提供任何方法来做到这一点吗?和 2,我收到一个带有一些字符的 400 Bad Request。我尝试用utf8_encode
包装file_get_contents
的结果,但它没有解决问题。有什么想法吗?
由于某种原因,dd
也不是“漂亮的印刷品”
dd
只是转储变量以向您展示它的工作原理。你可以对变量做任何你想做的事情,以你想要的方式打印它。
至于“laravel 没有提供任何方法来做到这一点” - 这 是 你这样做的方式。另一种选择是使用像 Guzzle 这样的包并 curl 请求 - github.com/guzzle/guzzle
最后 - 我修改了我的答案以包含 urlencode()
以使其适用于其他字符以上是关于使用 Laravel 从 API 获取 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章
将 JSON 数据从 API 转换为数组并在 Laravel 和 Guzzle HTTP Client 中分别显示?
如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值