php Laravel 如何知道 Request::wantsJson 是对 JSON 的请求?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/26532060/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How does Laravel know Request::wantsJson is a request for JSON?
提问by Martyn
I noticed that Laravel has a neat method Request::wantsJson
- I assume when I make the request I can pass information to request a JSON response, but how do I do this, and what criteria does Laravel use to detect whether a request asks for JSON ?
我注意到 Laravel 有一个简洁的方法Request::wantsJson
- 我假设当我发出请求时,我可以传递信息来请求 JSON 响应,但是我该怎么做,Laravel 使用什么标准来检测请求是否要求 JSON ?
回答by
It uses the Accept
header sent by the client to determine if it wants a JSON response.
它使用Accept
客户端发送的标头来确定它是否需要 JSON 响应。
Let's look at the code:
让我们看一下代码:
public function wantsJson() {
$acceptable = $this->getAcceptableContentTypes();
return isset($acceptable[0]) && $acceptable[0] == 'application/json';
}
So if the client sends a request with the first acceptable content type to application/json
then the method will return true.
因此,如果客户端向第一个可接受的内容类型发送请求,application/json
则该方法将返回 true。
As for how to request JSON, you should set the Accept
header accordingly, it depends on what library you use to query your route, here are some examples with libraries I know :
至于如何请求 JSON,您应该相应地设置Accept
标头,这取决于您用于查询路线的库,以下是我知道的一些库示例:
Guzzle(PHP):
狂饮(PHP):
GuzzleHttp\get("http://laravel/route", ["headers" => ["Accept" => "application/json"]]);
cURL(PHP) :
卷曲(PHP) :
$curl = curl_init();
curl_setopt_array($curl, [CURLOPT_URL => "http://laravel/route", CURLOPT_HTTPHEADER => ["Accept" => "application/json"], CURLOPT_RETURNTRANSFER => true]);
curl_exec($curl);
Requests(Python) :
请求(Python):
requests.get("http://laravel/route", headers={"Accept":"application/json"})