如何从PHP中的API调用的纯文本响应中获取数据?

时间:2017-09-13 19:20:18

标签: php api curl text

我正在以纯文本形式获得API响应。我需要从该文本响应中获取数据并需要将它们存储为变量。

API调用:

  $url="http://91.101.61.111:99/SendRequest/?mobile=9999999999&id=11011&reqref=501";
  $request_timeout = 60;
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_TIMEOUT, $request_timeout);
  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $request_timeout);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  $output = curl_exec($ch);
  $curl_error = curl_errno($ch);
  curl_close($ch);  

纯文本API响应:

REQUEST ACCEPTED your ref=501 system_reference=BA01562    

我需要从上面的纯文本响应中获取数据作为变量,如下所示:

$status = "REQUEST ACCEPTED";  
$myref = "501";  
$sysref = "BA01562";  

我试过了:

$explode1 = explode(" ", $output);      
$explode2 = explode("=", $explode1[3]);
$explode3 = explode("=", $explode1[4]);

$status = $explode1[0]." ".$explode1[1];
$myref = $explode2[1];
$sysref = $explode3[1];

我知道这不是一个正确的方法。但由于我是新手,我无法弄清楚这样做的正确方法。

请帮忙!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用preg_match,例如:

$rc = preg_match('/([\w\s]+) your ref=([\d]+) system_reference=([\w]+)/', $plain_response, $matches);
if ($rc)
{
    $status = $matches[1];  
    $myref = $matches[2];  
    $sysref = $matches[3];  
}

但当然,正如@ Don的恐慌所说,你需要更多的API知识,以确保解析。我给出的例子有点幼稚。无论如何,当您确定格式时,请使用regexp和preg_match。