Rutnet
Rutnet

Reputation: 1673

Getting API Response using Guzzle in Laravel

I am trying to get a response from the Metals API but keep getting 404 errors even though I can get the API using the URL.

    public function valueFromApi(){

    $accesskey = "123456";
    $client = new \GuzzleHttp\Client();
    $response = $client->request('POST', 'https://metals-api.com/api/latest', [
        'form_params' => [
            'access_key' => $accesskey,
            'base' => 'GBP',
            'symbols' => 'XAU',]
]);

dd($response);

}

If I try and access the URL directly through a browser this works:

https://metals-api.com/api/latest?access_key=123456&base=GBP&symbols=XAU

I must have misunderstood the way the parameters are working. Any advice is appreciated.

Upvotes: 0

Views: 136

Answers (2)

bhucho
bhucho

Reputation: 3420

As specified in their docs, you need to define the constant

    define("form_params", GuzzleHttp\RequestOptions::FORM_PARAMS );

Then you can use your code

$response = $client->request('POST', 'https://metals-api.com/api/latest', [
        'form_params' => [
            'access_key' => $accesskey,
            'base' => 'GBP',
            'symbols' => 'XAU',]
]);

Upvotes: 0

mrhn
mrhn

Reputation: 18916

Form params is not the same as query parameters. Therefor you need to set the parameters as query. If you are accessing this in the browser, i would not expect it to be a POST but a GET.

$response = $client->request('GET', 'https://metals-api.com/api/latest', [
    RequestOptions::QUERY => [
        'access_key' => $accesskey,
        'base' => 'GBP',
        'symbols' => 'XAU',
    ]
]);

I am using the RequestOptions, this is syntaxic sugar for the hardcoded string options, the same as 'query'.

Upvotes: 1

Related Questions