Search code examples
laravelhttphttpclientguzzle

Send nested array via Laravel Http Client


I want to send request to an API website containing nested params via Laravel Http Client (Laravel 7.x)

$params = [
   'type' => 'books',
   'variables' => [
      'color' => 'red',
      'size' => 'large'
   ]
]

I want my url to like this:

http://example.com/?type=books&variables={"color":"red","size":"large"}

encoded above url:

http://example.com/?type=books&variables=%7B%22color%22%3A%22red%22%2C%22size%22%3A%22large%22%7D

But when I use:

Http::get('http://example.com', $params);

The API server returns error.

But when I use:

Http::get('http://example.com/?type=books&variables={"color":"red","size":"large"}');

It works well.

So how can I convert my params array into url ?

(I don't have access to API server)


Solution

  • try json_encode()

     $params = [
                'type' => 'books',
                'variables' => json_encode([
                   'color' => 'red',
                   'size' => 'large'
                ])
             ]
    
    $url = "http://example.com?".http_build_query($params);
    
    Http::get($url);
    

    and http_build_query() ref link https://www.php.net/manual/en/function.http-build-query.php