我如何使Symfony2在自定义控制器中忽略Guzzle Client错误响应异常?

   function order_confirmationAction($order,$token) { 

        $client = new \GuzzleHttp\Client();
        $answer  = $client->post("http://www.fullcommerce.com/rest/public/Qtyresponse",
                    array('body' => $order)
        );

        $answer  = json_decode($answer); 

        if ($answer->status=="ACK") {
            return $this->render('AcmeDapiBundle:Orders:ack.html.twig', array(
            'message'   => $answer->message,
        ));
        } else throw new \Symfony\Component\HttpKernel\Exception\HttpException(500, $answer->message);
}

如果$client-> post()响应状态代码为“错误500”,则Symfony会停止执行脚本,并在json解码之前引发新异常.
如何强制Symfony忽略$client-> post()错误的响应并执行到最后一个if语句?

解决方法:

            $client = new \GuzzleHttp\Client();
            try {
                $answer  = $client->post("http://www.fullcommerce.com/rest/public/Qtyresponse",
                        array('body' => $serialized_order)
                );
            }
            catch (\GuzzleHttp\Exception\ServerException $e) {

                if ($e->hasResponse()) {
                    $m = $e->getResponse()->json();
                    throw new \Symfony\Component\HttpKernel\Exception\HttpException(500, $m['result']['message']);
                }

            }

我这样解决了.这样,即使远程服务器返回错误500代码,我也可以访问它.

上一篇:php-在guzzle2中使用guzzle客户端发布json对象


下一篇:composer 报错: Error while processing content unencoding: Unknown failure within decompression softwar