在Laravel中使用Guzzle获取API响应

时间:2020-07-26 19:51:43

标签: php laravel guzzle

我正在尝试从Metals API获得响应,但是即使我可以使用URL获取API,也一直收到404错误。

    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);

}

如果我尝试直接通过浏览器访问URL,那么它将起作用:

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

我一定误解了参数的工作方式。任何建议表示赞赏。

2 个答案:

答案 0 :(得分:1)

表单参数与查询参数不同。因此,您需要将参数设置为查询。如果您在浏览器中访问此文件,我希望它不是POST而是GET。

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

我正在使用RequestOptions,这是硬编码字符串选项的语法糖,与'query'相同。

答案 1 :(得分:1)

如其docs中所指定,您需要定义常量

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

然后您就可以使用代码了

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