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)的主要内容,如果未能解决你的问题,请参考以下文章
无法获得工匠队列:在 Elastic Beanstalk (Laravel/Redis) 上使用主管处理作业
laravel接管公众号的消息系统时公众号无法转发消息的处理
异常处理程序出错:无法打开流或文件“/var/www/app/storage/logs/laravel.log”:无法打开流: