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