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

Posted

技术标签:

【中文标题】Laravel - 无法处理 RequestException(Guzzle + MailChimp)【英文标题】:Laravel - Can't handle RequestException (Guzzle + MailChimp) 【发布时间】:2017-04-08 22:28:00 【问题描述】:

我正在尝试处理 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';
            
        



    

【问题讨论】:

【参考方案1】:

根据Guzzle documentation:

如果 http_errors 请求选项设置为 true,则会抛出 GuzzleHttp\Exception\ClientException 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,您可以用相同的方式处理这些错误

【讨论】:

【参考方案2】:

尝试使用这样的东西:

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
    

【讨论】:

这样的作品!我知道了(prntscr.com/db9m77),我该如何使用“#code”? 试试 $e->getResponse()->getStatusCode();

以上是关于Laravel - 无法处理 RequestException(Guzzle + MailChimp)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel dont报告处理程序无法正常工作

无法获得工匠队列:在 Elastic Beanstalk (Laravel/Redis) 上使用主管处理作业

laravel接管公众号的消息系统时公众号无法转发消息的处理

异常处理程序出错:无法打开流或文件“/var/www/app/storage/logs/laravel.log”:无法打开流:

无法在 laravel 5.2 中查询 json 数据

Laravel:“无法在存储/视图中打开流”