Guzzle发布json数据导致400个不良请求

问题描述 投票:0回答:1

我试图使用guzzle对开放API发布请求。我也发送帖子数据如下。出于某种原因,我得到了400个错误请求

$req = $client->request('POST',$this->base_url.'nutrients?app_id='.$this->app_id.'&app_key='.$this->api_key,[
    'headers' => [
        'Content-Type' => 'application/json'
    ],
    \GuzzleHttp\RequestOptions::JSON => [
        "yield" => $portions,
        "ingredients" => [
            "quantity" => $portions,
            "measureURI" => "\"$f_uri\"",
            "foodURI" => "\"$m_uri\""
        ]
    ]
]);
$response = $client->send($req);
$decoded = json_decode($response->getBody());
dd($decoded);

api文档在curl中显示了如下方法:curl调用:

curl -d @food.json -H "Content-Type: application/json" "https://api.edamam.com/api/food-database/nutrients?app_id=${YOUR_APP_ID}&app_key=${YOUR_APP_KEY}" 

food.json:

{
    "yield": 1,
    "ingredients": [
        {
            "quantity": 1,
            "measureURI": "http://www.edamam.com/ontologies/edamam.owl#Measure_unit",
            "foodURI": "http://www.edamam.com/ontologies/edamam.owl#Food_11529"
        }
    ]
}

我正确生成了measureURI和foodURI的链接。

php json post guzzle
1个回答
0
投票

你不需要在->send()之后做->request(),它已经返回了ResponseInterface的一个实例。

所以就

$response = $client->request('POST', $this->base_url.'nutrients?app_id='.$this->app_id.'&app_key='.$this->api_key, [
        // ...
    ]
]);
$decoded = json_decode($response->getBody()->getContents());
© www.soinside.com 2019 - 2024. All rights reserved.