【问题标题】:Laravel 5 - Post JSON data using curlLaravel 5 - 使用 curl 发布 JSON 数据
【发布时间】:2015-10-28 02:12:36
【问题描述】:

我正在尝试使用 curl 使用命令行发布数据。

curl -v POST -d ' { "data1": "sample1", "data2": "sample2" } ' -H "Content-Type: application/json" -H "Authorization: BASIC vkslnkg561mZEqCq3l3RglAOAZ7d8XBeg2VjIAyC" http://localhost/Bowling/public/api/foo

当我尝试从 POSTMAN 发帖时,我会取回数据。但是当我使用 curl 时,我会收到 500 Internal Server Error。

我的路由.php

Route::any('api/foo', function () { 
    return json_encode("Some Data"); 
});

请问我的 curl 语句有问题还是我需要在 Laravel 中修复一些身份验证问题。

我什至尝试过

curl -X POST -H "Content-Type: application/json" -d '{"key":"val"}' -H "Authorization: BASIC 0xD8BC2CLksEMh1ScRdG8dWanCDazYiQsGL7sYnl" http://localhost/Bowling/public/api/foo

【问题讨论】:

  • 您是否查看了日志以了解为什么会收到 500 错误?
  • 嘿,詹姆斯,它说 local.ERROR: exception 'Illuminate\Session\TokenMismatchException' in G:\wamp\www\Bowling\vendor\compiled.php:2440 但我得到了具有相同标记的输出对于 curl -v -H "Content-Type: application/json" -H "Authorization: BASIC 0xD8BC2CLksEMh1ScRdG8dWanCDazYiQsGL7sYnl" localhost/Bowling/public/api/leagues
  • 如果我在 app/Http/Kernel.php 中删除 'App\Http\Middleware\VerifyCsrfToken',那么它可以工作。但我需要通过身份验证令牌。
  • 如何确保为 CSRF 令牌传递的令牌始终正确,因为它会为每个会话生成一个?
  • 它每次都会改变,但这是分配给我的一种任务,我必须使用 CSRF 令牌进行身份验证。我正在考虑一种解决方案,从标头中发送的内容中读取 CSRF 令牌并进行验证。

标签: php laravel post curl


【解决方案1】:

你所做的并没有错。只是您的通话延迟导致令牌不匹配。通过邮递员手动测试我的 API 时,我遇到了同样的问题。遗憾的是 Laravel 没有任何装饰器可以像 Django 一样豁免 CSRF。

在 Postman 上,我可以通过编写返回 csrf token 的路由来测试我的 API 问题。然后我复制该令牌并将其作为表单数据传递给我的下一个POST 调用。我找不到任何其他选择。

让我知道它是否适合你。

【讨论】:

  • 嘿@Vishal,这是一种很好的方法,问题是数据和csrf令牌必须一次发送。我可以使用 Postman 获得预期的结果。
  • 您是否尝试过发送以_token 为键、以csrf_token 为值的csrf 令牌以及发布数据。但是要获取 CSRF 令牌,您至少需要对服务器进行 GET 调用。所以发布数据和获取 csrf 不能一蹴而就。
  • csrf 令牌是给我们的,i=所以基本上我们有一个当前的 csrf 令牌。只需要发送带有数据的标题。在邮递员中,我使用 key 作为 _token 和 csrf 值。但是当我使用 curl 发送时,它会抛出 500 服务器错误。
  • 如果你已经有一个 csrf 然后你再进行一个新的调用,它将 110% 抛出 HTTP 500。不清楚你想要实现什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2016-03-05
  • 2013-09-09
  • 2012-06-20
相关资源
最近更新 更多