【问题标题】:Laravel - Can't handle RequestException (Guzzle + MailChimp)Laravel - 无法处理 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';
            }
        }



    }
}

【问题讨论】:

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


    【解决方案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();
      猜你喜欢
      • 2017-04-10
      • 2015-09-04
      • 2014-12-24
      • 2016-05-12
      • 1970-01-01
      • 2013-12-23
      • 2017-12-08
      • 2015-05-15
      • 1970-01-01
      相关资源
      最近更新 更多