对此必须是一个非常简单的解决方案,但我不知道如何在Google或Stackoverflow中搜索这个问题,所以,是的,到目前为止我找不到任何东西。
我在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');
答案 0 :(得分:1)
我认为回答是正确的。我要做的是捕获try-catch块中的错误,然后继续我想要的方式。
答案 1 :(得分:1)
问题是如果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) {
答案 2 :(得分:0)
遇到了同样的问题,但是有一个网站,我只是在apache服务器上重写了我的mod_security模块,它再次与ssl一起工作良好。您可以阅读更多here