【问题标题】:Using curl with email and password使用带有电子邮件和密码的 curl
【发布时间】: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。

标签: php api laravel curl


【解决方案1】:

您应该首先登录您的网站。你可以试试这个:
curl --user email:password http://domain.tld/login_page

然后将 cookie 用于您的第二个请求:
curl --cookie http://domain.tld/file/to/export

如果这不起作用,您需要使用 cURL 完成整个提交操作,这意味着使用电子邮件和密码等进行 POST 请求。

有人给了good solution here

PS:如果您也不需要令牌来请求您的 API,请查看。

【讨论】:

    猜你喜欢
    • 2018-03-14
    • 2020-06-17
    • 2021-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多