处理 Laravel 中的 text/plain 请求(通过 navigator.sendBeacon 发送)
Handling text/plain request in Laravel (sent via navigator.sendBeacon)
问题:
我正在尝试从 text/plain POST 请求中获取 内容 / body 在 Controller 中 Laravel 8.
文档或多次 google 搜索均无效。
我试过:
$request->input();
$request->all();
$request->json();
json_encode($request);
所有这些似乎都表明请求完全是空的。
上下文
这可能与解决方案无关,但可能会帮助其他正在尝试 google 这个问题的人:我试图用我的控制器处理的请求是由 navigator.sendBeacon 发送的客户端。请求 body 实际上是字符串化的 JSON,但是 sendBeacon 不允许您发送带有 content-type JSON 的请求。 Devtools 将此请求的 content-type header 显示为 'text/plain'.
我的回答:
使用 $request->getContent()
获取 text/plain HTTP 请求的内容。
然后,如果您遇到像我这样的情况,其中文本实际上是 JSON,请使用 json_decode($request->getContent(),true)
从您可以使用的内容中获取标准 PHP 数组在你的控制器中。
事实证明这很简单,但是文档中或任何在线搜索中都没有这些信息,所以我认为 post 无论如何都是值得的。 .
您可以像这样 JSON 发送数据
data = new Blob([JSON.stringify(data)], {type : 'application/json'})
navigator.sendBeacon('/your/route/here', data)
问题:
我正在尝试从 text/plain POST 请求中获取 内容 / body 在 Controller 中 Laravel 8.
文档或多次 google 搜索均无效。
我试过:
$request->input();
$request->all();
$request->json();
json_encode($request);
所有这些似乎都表明请求完全是空的。
上下文
这可能与解决方案无关,但可能会帮助其他正在尝试 google 这个问题的人:我试图用我的控制器处理的请求是由 navigator.sendBeacon 发送的客户端。请求 body 实际上是字符串化的 JSON,但是 sendBeacon 不允许您发送带有 content-type JSON 的请求。 Devtools 将此请求的 content-type header 显示为 'text/plain'.
我的回答:
使用 $request->getContent()
获取 text/plain HTTP 请求的内容。
然后,如果您遇到像我这样的情况,其中文本实际上是 JSON,请使用 json_decode($request->getContent(),true)
从您可以使用的内容中获取标准 PHP 数组在你的控制器中。
事实证明这很简单,但是文档中或任何在线搜索中都没有这些信息,所以我认为 post 无论如何都是值得的。 .
您可以像这样 JSON 发送数据
data = new Blob([JSON.stringify(data)], {type : 'application/json'})
navigator.sendBeacon('/your/route/here', data)