【问题标题】:How to extract values from a curl reponse如何从 curl 响应中提取值
【发布时间】:2021-07-29 16:54:00
【问题描述】:

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

    $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-------------

【问题讨论】:

    标签: php json codeigniter curl


    【解决方案1】:

    通过将 CURLOPT_HEADER 设置为 false 来禁用响应标头。

    curl_setopt($curl, CURLOPT_HEADER, false);
    

    然后json_decode就可以了,你就可以用这个获取token了;

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

    【讨论】:

      【解决方案2】:

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

      $access_token = json_decode($curl_response, true);
      

      然后你可以通过以下方式获取访问令牌:

      $access_token['access_token']
      

      【讨论】:

      • curl_exec() 只需要 1 个参数,给定 2 个
      • 抱歉已经编辑过了。它不应该是 curl 实际上它将是 json_decode 并为数组返回 true
      猜你喜欢
      • 1970-01-01
      • 2020-08-08
      • 2022-01-04
      • 1970-01-01
      • 2012-04-02
      • 2019-12-03
      • 1970-01-01
      • 2021-11-29
      • 2021-05-26
      相关资源
      最近更新 更多