使用 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 中分别显示?

Laravel 8 API:获取 id 返回空 json

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

从 json i laravel 获取数据时出现错误异常

在我的 laravel 应用程序中从我的 PHP API 获取 json 响应

从 laravel 调用 HTTPS 请求到外部 API