【发布时间】:2016-09-29 00:03:04
【问题描述】:
我有一个 api 可以将一些信息导出到csv 文件。 API 是正确的,当我从浏览器访问它时,它正在下载我的文件。我需要从终端访问此 API 并下载文件,而无需转到浏览器。
我的 API 路由如下所示:
Route::get('/api/file/export', 'File\FileController@export', [
'middleware'=>'auth.basic'
]);
我尝试像这样使用 curl:
curl --user email:password http://example.com/api/file/export
我尝试了不同的 curl 命令,但每个命令都显示重定向到登录 html。当我使用-O 下载文件的命令时,它会下载一个包含重定向到登录链接的文件。
curl --user email:password -O http://example.com/api/file/export
我是否正确调用 API?我还能如何从终端访问 API?
【问题讨论】:
-
看起来您使用的是基本的 HTTP 身份验证,但您所描述的错误似乎是典型的用户名/密码身份验证。你是否修改了 Laravel 中默认的
auth.basic中间件? -
不,我没有修改
auth.basic文件。我应该做出哪些改变? -
嗯。也许我弄错了,但是如果您使用的是 HTTP 身份验证,则不应看到“登录 html”。它应该只是一个 401 Unauthorized 响应,就是这样。无论如何,在构建需要安全性的 API 时,通常会使用基于令牌的身份验证。 Fortunately Laravel has that sort of thing baked in(虽然我知道这需要你换档)。
-
我收到 302 重定向作为 HTTP 响应,但实际上我昨天决定切换到基于令牌的身份验证。我正在将 API 添加到使用 Laravel 5.1 的旧项目中,所以我不能使用 Laravel Passport 而是使用这个 plugin。然后我将使用 Python 脚本从终端调用 API。