如何使用 Postman 处理 Laravel $_POST 请求
Posted
技术标签:
【中文标题】如何使用 Postman 处理 Laravel $_POST 请求【英文标题】:How to use Postman for Laravel $_POST request 【发布时间】:2016-05-10 07:57:05 【问题描述】:如何尝试使用 Postman 向 Laravel 应用发送发布请求?
通常 Laravel 有一个 csrf_token
,我们必须通过 POST/PUT 请求传递它。如何在 Postman 中获取和发送此值?是否有可能不关闭 CSRF 保护?
【问题讨论】:
但是,如果你真的想要 csrf_token,你可以向路由发出 get 请求,然后手动插入 postman 中生成的令牌。 [不是真正的解决方案] 【参考方案1】:编辑:
等等,我看错了这个问题。你想在不关闭 CSRF 保护的情况下这样做吗?就像 Bharat Geleda 说的:你可以制作一个只返回令牌的路由,然后手动将其复制到邮递员的 _token
字段中。
但我建议您从 CSRF 保护中排除您的 api 调用,如下所示,然后添加某种 API 身份验证。
你运行的是哪个版本的 laravel?
Laravel 5.2 及更高版本:
自 5.2 起,CSRF 令牌仅在带有 web
中间件的路由上需要。所以把你的 api 路由放在组外,用web
中间件。
有关详细信息,请参阅 documentation 中的“默认路由文件”标题。
Laravel 5.1 和 5.2:
您可以像这样在VerifyCsrfToken
中间件中排除不应具有 CSRF 保护的路由:
class VerifyCsrfToken extends BaseVerifier
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'api/*',
];
有关详细信息,请参阅“从 CSRF 保护中排除 URI”标题 documentation。
【讨论】:
谢谢,是的,这更有意义,对于 API 而不是 CSRF,使用身份验证是最好的选择 不能让它在 Laravel 5.5 中工作。邮递员只显示“页面因不活动而过期” - 这意味着令牌被拒绝/或不起作用..? @Inigo 那是 TokenException 的新页面,所以你的令牌被拒绝了。可能是因为您的会话无法正常工作。检查您的存储文件夹是否可写入会话。 @Hilmanrdn:有点晚了,但我建议同时使用这两种方法——它们旨在解决完全不同的安全漏洞。【参考方案2】:如果您将会话存储在 Cookie 中,则可以从开发者工具中的身份验证请求中获取 Cookie。
复制该 Cookie 并将其粘贴到您的 POSTMAN 或 Paw 请求的标头中。
这种方法允许您将 API 测试限制在当前会话中。
【讨论】:
我得到了 CSRF 令牌不匹配。【参考方案3】:1.您可以使用控制器创建一个新路由来显示 csrf 令牌,并借助以下功能。 (在路由上使用 Get 请求)
public function showToken
echo csrf_token();
2.选择 postman 上的 Body 选项卡,然后选择 x-www-form-urlencoded。 3.复制token并粘贴到postman中作为key的值_token。 4.在您的 URL/端点上执行您的发布请求
【讨论】:
【参考方案4】:在标头中,在发出请求之前添加 cookie、XSRF-TOKEN cookie 和应用程序 cookie。即 yourappname_session
【讨论】:
【参考方案5】:在 laravel 中,5.3.转到 app/Http/Kernel.php
找到 middlewareGroups
然后评论 VerifyCsrfToken。因为它会在为您的请求提供服务之前执行所有中间件。
protected $middlewareGroups = [
'web' => [
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
***// \App\Http\Middleware\VerifyCsrfToken::class,***
\Illuminate\Routing\Middleware\SubstituteBindings::class,
],
'api' => [
'throttle:60,1',
'bindings',
],
];
【讨论】:
虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高答案的长期价值。 原因是在 post request laravel 5.3 检查 csrf 令牌。评论此行后,我们阻止申请 csrf 令牌验证。 这是个坏主意,因为现在您的所有路由都没有 CSRF 保护。 en.wikipedia.org/wiki/Cross-site_request_forgery 对 API 路由禁用它是可以的,因为您可以对这些路由实施身份验证,从而再次保护它们。以上是关于如何使用 Postman 处理 Laravel $_POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何在没有 SPA 或图形界面的情况下,仅通过 POSTMAN 访问 Laravel Sanctum 的 API 路由?
Laravel:如何通过 API postman 上传图像并将其保存到数据库(phpmyadmin)