【问题标题】:Trying to get property of non-object error PHP curl试图获取非对象错误PHP curl的属性
【发布时间】:2020-12-05 03:34:07
【问题描述】:

我正在尝试使用 api 来获取水果信息。

$fruitStirng = 'apple';

$url = "https://www.fruityvice.com/api/fruit/".$fruitStirng;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);
    
$main = json_decode($res);

结果应该是这样的:

{ "genus": "Malus", "name": "Apple", "id": 6, "family": "Rosaceae", "order": "Rosales", "nutritions": { "carbohydrates": 11.4, "protein": 0.3, "fat": 0.4, "calories": 52, "sugar": 10.3 } }

但例如当我尝试像这样 echo genus 时:

$genus = $main->genus;
echo $genus

我收到Trying to get property 'genus' of non-object 错误!

我也用过foreach,但也出错了

Invalid argument supplied for foreach()

【问题讨论】:

  • $res 不等于false?试试var_dump($res);
  • 如果是false,请使用if (curl_errno($ch)) { $error_msg = curl_error($ch);} 来回显错误。可能的错误可能是SSL certificate problem: unable to get local issuer certificatebool(false) 或相关内容。
  • @IhorVyspiansky 认为这是错误的

标签: php json api curl


【解决方案1】:

由于返回 JSON 的 API 使用 HTTPS,您必须配置 cURL SSL 选项 (CURLOPT_SSL_VERIFYPEER)。这是一个工作代码:

<?php
$fruitString = 'apple';

$url = "https://www.fruityvice.com/api/fruit/".$fruitString;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$res = curl_exec($ch);

$main = json_decode($res);

$genus = $main->genus;
echo $genus; // Malus

【讨论】:

    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2018-05-23
    • 1970-01-01
    相关资源
    最近更新 更多