Laravel - 无法处理RequestException(Guzzle + MailChimp)

时间:2016-11-24 14:54:42

标签: php laravel http-status-code-404 mailchimp guzzle

我试图处理404请求异常。这是我第一次使用Guzzle所以我没有先处理错误提示就无法处理异常,我需要检查错误代码,因为在mailchimp API上它的错误代码给出了我们需要的信息。

相反,我得到了回应 - http://prntscr.com/db9ari

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Newsletter;
use GuzzleHttp\Client;

class NewsletterController extends Controller
{


    public function api()
    {

        $mailchimp = new Client(['base_uri' => 'https://us14.api.mailchimp.com/3.0/']);

        try {
            $checkEmail = $mailchimp->request('GET', 'lists/LIST-ID/members/' . md5('EMAIL), [ 'headers' => [ 'Authorization' => 'apikey ' . config('globals.mailchimp_key') ]]);
        }

        catch( RequestException $exception ) {

            if ($exception->getStatusCode() === 404)
            {
                return 'STRING THAT I WANT TO RETURN IN CASE OF ERROR';
            }
        }



    }
}

2 个答案:

答案 0 :(得分:1)

根据Guzzle documentation

  

如果GuzzleHttp\Exception\ClientException请求选项设置为true,则会引发http_errors 400级错误

您可以通过以下两种方式解决此问题:

  • 在实例化客户端时将http_errors值设置为false。对于您的代码,这看起来像这样:$mailchimp = new Client(['base_uri' => 'https://us14.api.mailchimp.com/3.0/', 'http_errors' => false]);

  • 使用try / catch包裹你的电话并抓住ClientException

Guzzle也会为任何500级错误抛出ServerException,你可以用同样的方式处理

答案 1 :(得分:0)

尝试使用类似这样的内容:

try {
    $checkEmail = $mailchimp->request('GET', 'lists/LIST-ID/members/' . md5('EMAIL), [ 'headers' => [ 'Authorization' => 'apikey ' . config('globals.mailchimp_key') ]]);
}catch( \Exception $e ) {
    if ($e instanceof GuzzleHttp\Exception\RequestException){
        if ($exception->getStatusCode() === 404)
        {   
            return 'STRING THAT I WANT TO RETURN IN CASE OF ERROR';
        }
    }else{
        // do anything else here
    }
}