Laravel - 无法处理 RequestException(Guzzle + MailChimp)
Laravel - Can't handle RequestException (Guzzle + MailChimp)
我正在尝试处理 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';
}
}
}
}
尝试使用这样的东西:
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
}
}
A GuzzleHttp\Exception\ClientException
is thrown for 400 level errors if the http_errors
request option is set to true
您可以通过以下两种方式之一解决此问题:
实例化客户端时将 http_errors
值设置为 false
。对于您的代码,这看起来像这样:$mailchimp = new Client(['base_uri' => 'https://us14.api.mailchimp.com/3.0/', 'http_errors' => false]);
将您的呼叫包装在 try/catch 中并捕获 ClientException
。
Guzzle 也会对任何 500 级错误抛出 ServerException
,您可以用同样的方式处理
我正在尝试处理 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';
}
}
}
}
尝试使用这样的东西:
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
}
}
A
GuzzleHttp\Exception\ClientException
is thrown for 400 level errors if thehttp_errors
request option is set to true
您可以通过以下两种方式之一解决此问题:
实例化客户端时将
http_errors
值设置为false
。对于您的代码,这看起来像这样:$mailchimp = new Client(['base_uri' => 'https://us14.api.mailchimp.com/3.0/', 'http_errors' => false]);
将您的呼叫包装在 try/catch 中并捕获
ClientException
。
Guzzle 也会对任何 500 级错误抛出 ServerException
,您可以用同样的方式处理