Laravel:忽略 412 错误页面
Posted
技术标签:
【中文标题】Laravel:忽略 412 错误页面【英文标题】:Laravel: Ignore 412 error page 【发布时间】:2017-01-12 19:16:00 【问题描述】:必须有一个非常简单的解决方案,但我不知道如何在 Google 或 *** 中搜索它,所以,是的,到目前为止我没有找到任何东西。
我在 Lumen 中编写了一个简单的 API 路由,它在验证失败时返回一个包含 421 的 json 字符串:
"code": 412, "status": "error", "data": "validation failed"
现在我想在另一个 Laravel 项目中调用该路由,但是我得到一个巨大的 错误 页面,而不是来自 API 的 JSON 字符串:
客户端错误:
POST http://www.serellyn.net/development/game_api/public/platforms
导致412 Precondition Failed
回复:
"code":412,"status":"error","data":"validation failed"
我确实认为这是非常正常的行为,因为 Laravel 在其响应中看到了错误。但我想做的就是接收我自己的带有 412 错误代码的 json 字符串,并能够继续使用我的网页。
我该如何解决这个问题? 提前谢谢你。
编辑:忘记添加一些代码。我使用 Guzzle 调用我的 API。
$client = new Client(['base_uri' => 'http://www.serellyn.net/development/game_api/public/', 'auth' => array('dev', '<dev>2016')]);
$res = $client->request('POST', 'platforms', array('form_params' => ['name' => $request->name]));
if($res->getStatusCode() == 201)
Session::flash('success', $request->name . ' successfully added');
else
return redirect()->route('platforms.add.get');
【问题讨论】:
你能贴出你用来调用api的代码吗? @AmirBar,对此感到抱歉。我一开始想添加它,我忘了:) @AmirBar 检查我的编辑:) 查看 Exceptions docs.guzzlephp.org/en/latest/quickstart.html#exceptions 下的文档@“如果 http_errors 请求选项设置为 true,则会针对 400 级错误抛出 GuzzleHttp\Exception\ClientException” 所以最终的答案是: $res = $client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' = > $request->name])); if($res->getStatusCode() == 201) 【参考方案1】:有同样的问题,但在一个网站上,我只是在 apache 服务器上重写了我的 mod_security 模块,它再次与 ssl 一起工作得很好。你可以阅读更多here
【讨论】:
【参考方案2】:问题是如果 http_errors 请求选项设置为 true,Guzzle 会抛出 400 级错误的异常。 (这是默认值)
您需要在请求中输入'http_errors' => false
,例如:
$client->request('POST', 'platforms', array('http_errors' => false,'form_params' => ['name' => $request->name])); if($res->getStatusCode() == 201)
http_errors docs
【讨论】:
【参考方案3】:我认为答案是正确的。我要做的是在 try-catch 块中捕获错误,然后继续我想要的。
【讨论】:
但是我不能使用我在 JSON 中返回的内容,对吧?因为 API 进行验证,所以如果验证失败,我想知道哪个验证失败并且在我的 API 中处理,然后在 JSON 中返回。 当然可以。您应该将错误消息与错误一起发送。在 try-catch 中从 Exception 中获取错误信息,您可以找出失败的原因。以上是关于Laravel:忽略 412 错误页面的主要内容,如果未能解决你的问题,请参考以下文章