我试图处理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';
}
}
}
}
答案 0 :(得分:1)
如果
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
}
}