Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Guzzle: handle 400 bad request

I'm using Guzzle in Laravel 4 to return some data from another server, but I can't handle Error 400 bad request

 [status code] 400 [reason phrase] Bad Request 

using:

$client->get('http://www.example.com/path/'.$path,             [                 'allow_redirects' => true,                 'timeout' => 2000             ]); 

how to solve it? thanks,

like image 239
mwafi Avatar asked Jul 30 '14 15:07

mwafi


People also ask

How do I send HTTP request using guzzle?

Sending Requests You can create a request and then send the request with the client when you're ready: use GuzzleHttp\Psr7\Request; $request = new Request('PUT', 'http://httpbin.org/put'); $response = $client->send($request, ['timeout' => 2]);

What is guzzle request?

Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services. Simple interface for building query strings, POST requests, streaming large uploads, streaming large downloads, using HTTP cookies, uploading JSON data, etc...

How do I get my status code from response guzzle?

You can use the getStatusCode function. $response = $client->request('GET', $url); $statusCode = $response->getStatusCode();

How do you set headers in guzzle?

Each key is the name of a header, and each value is a string or array of strings representing the header field values. // Set various headers on a request $client->request('GET', '/get', [ 'headers' => [ 'User-Agent' => 'testing/1.0', 'Accept' => 'application/json', 'X-Foo' => ['Bar', 'Baz'] ] ]);


2 Answers

As written in Guzzle official documentation: http://guzzle.readthedocs.org/en/latest/quickstart.html

A GuzzleHttp\Exception\ClientException is thrown for 400 level errors if the exceptions request option is set to true

For correct error handling I would use this code:

use GuzzleHttp\Client; use GuzzleHttp\Exception\RequestException;  try {      $response = $client->get(YOUR_URL, [         'connect_timeout' => 10     ]);              // Here the code for successful request  } catch (RequestException $e) {      // Catch all 4XX errors           // To catch exactly error 400 use      if ($e->hasResponse()){         if ($e->getResponse()->getStatusCode() == '400') {                 echo "Got response 400";         }     }      // You can check for whatever error status code you need       } catch (\Exception $e) {      // There was another exception.  } 
like image 105
Hpatoio Avatar answered Sep 19 '22 00:09

Hpatoio


$client->get('http://www.example.com/path/'.$path,             [                 'allow_redirects' => true,                 'timeout' => 2000,                 'http_errors' => true             ]); 

Use http_errors => false option with the request.

like image 39
adam Avatar answered Sep 21 '22 00:09

adam