Php 如何从curl响应中提取值

Php 如何从curl响应中提取值,php,json,codeigniter,curl,Php,Json,Codeigniter,Curl,下面我有一个带有curl功能的方法。我想使用PHP从结果中提取访问令牌。我已经用下面代码中所示的三种方式尝试了echo,但是我只得到了一个布尔响应或一个错误。我该怎么做呢 $consumer_key = "CONSUMER_KEY"; $consumer_secret = "CONSUMER_SECRET"; $url = 'https://sandbox.safaricom.co.ke/oauth/v1/generate?gra

下面我有一个带有curl功能的方法。我想使用PHP从结果中提取访问令牌。我已经用下面代码中所示的三种方式尝试了echo,但是我只得到了一个布尔响应或一个错误。我该怎么做呢

    $consumer_key = "CONSUMER_KEY";
    $consumer_secret = "CONSUMER_SECRET";

    $url = 'https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials';

    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    $credentials = base64_encode($consumer_key.":".$consumer_secret);
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Authorization: Basic '.$credentials)); //setting a custom header
    curl_setopt($curl, CURLOPT_HEADER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

    $curl_response = curl_exec($curl);

    $access_token = json_decode($curl_response);
    echo "<br><br>---------------Trial 1-------------<br>";
    echo $curl_response;
    echo "<br><br>---------------Trial 2-------------<br>";
    echo $access_token->access_token;
    echo "<br><br>---------------Trial 3-------------<br>";
    echo $access_token['access_token'];

  }```

This is the response I get:

---------------Trial 1-------------
HTTP/1.1 200 OK Date: Fri, 07 May 2021 10:18:40 GMT Content-Type: application/json;charset=UTF-8 Content-Length: 113 Connection: keep-alive Cache-Control: no-store { "access_token": "a6aAK9rdA4MA2ChqVzEDge6DAWTC", "expires_in": "3599" }

---------------Trial 2-------------
A PHP Error was encountered
Severity: Notice

Message: Trying to get property 'access_token' of non-object

Filename: controllers/Lab.php

Line Number: 99

Backtrace:

File: /home2/airduka/public_html/sandbox/application/controllers/Lab.php
Line: 99
Function: _error_handler

File: /home2/airduka/public_html/sandbox/index.php
Line: 315
Function: require_once



---------------Trial 3-------------
$consumer\u key=“consumer\u key”;
$consumer\u secret=“consumer\u secret”;
$url='1https://sandbox.safaricom.co.ke/oauth/v1/generate?grant_type=client_credentials';
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$URL);
$credentials=base64_encode($consumer_key.:“$consumer_secret);
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Authorization:Basic'.$credentials))//设置自定义标题
curl_setopt($curl,CURLOPT_头,true);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,false);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
$curl\u response=curl\u exec($curl);
$access\u token=json\u decode($curl\u response);
回声“

--------------试验1--------------
”; 回音$curl_响应; echo“

--------------试验2--------------
”; echo$access\u token->access\u token; 回声“

--------------试验3--------------
”; echo$access_token['access_token']; }``` 这是我得到的答复: ---------------试验1------------- HTTP/1.1 200确定日期:2021年5月7日星期五10:18:40 GMT内容类型:application/json;charset=UTF-8内容长度:113连接:保持活动缓存控制:无存储{“访问令牌”:“a6aAK9rdA4MA2ChqVzEDge6DAWTC”,“过期时间”:“3599”} ---------------试验2------------- 遇到一个PHP错误 严重性:通知 消息:正在尝试获取非对象的属性“access\u token” 文件名:controllers/Lab.php 电话号码:99 回溯: 文件:/home2/airduka/public_html/sandbox/application/controllers/Lab.php 线路:99 函数:\u错误\u处理程序 文件:/home2/airduka/public_html/sandbox/index.php 电话号码:315 功能:需要一次 ---------------试验3-------------
通过将CURLOPT_头设置为false来禁用响应头

curl_setopt($curl, CURLOPT_HEADER, false);
然后json_解码将起作用,您可以用它获得令牌

$curl_response = curl_exec($curl);
$access_token = json_decode($curl_response, true);
$access_token['access_token']

使用以下代码使json对象以数组形式返回:

$access_token = json_decode($curl_response, true);
然后,您可以通过以下方式获得访问令牌:

$access_token['access_token']

curl_exec()只需要1个参数,2个已编辑的给定器。它不应该是curl,实际上它将是json_解码,数组返回true