首页 > 解决方案 > 从 CURL 响应中获取特定行

问题描述

我正在研究 WHMCS API 并在 curl 中获得响应。我必须从第 25 行准确获取值。响应看起来像这样..

  array(1) {
    ["product"]=>
    array(1) {
      [0]=>
      array(41) {
        ["id"]=>
        int(107)  // This is line 25

我必须获取括号内的整数(然后在我的 bash 脚本中将其用作变量)。对于上面的示例,它是 107。

有没有更简单的方法来实现这一点。

======

这是我的 php 文件包含。

<?php  
/**  
 * WHMCS Sample API Call  
 *  
 * @package    WHMCS  
 * @author     WHMCS Limited <development@whmcs.com>  
 * @copyright  Copyright (c) WHMCS Limited 2005-2016  
 * @license    http://www.whmcs.com/license/ WHMCS Eula  
 * @version    $Id$  
 * @link       http://www.whmcs.com/  
 */  
  
// API Connection Details  
$whmcsUrl = "https://my.whmcswebsite.net/";  
  
// For WHMCS 7.2 and later, we recommend using an API Authentication Credential pair.  
// Learn more at http://docs.whmcs.com/API_Authentication_Credentials  
// Prior to WHMCS 7.2, an admin username and md5 hash of the admin password may be used.  
$username = "something";  
$password = "something";  
  
// Set post values  
$postfields = array(  
    'username' => $username,  
    'password' => $password,  
    'action' => 'GetClientsProducts',  
    'domain' => 'fifi790.mydomain.net',  
    'responsetype' => 'json',  
);  
  
// Call the API  
$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $whmcsUrl . 'includes/api.php');  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_TIMEOUT, 30);  
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);  
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);  
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postfields));  
$response = curl_exec($ch);  
if (curl_error($ch)) {  
    die('Unable to connect: ' . curl_errno($ch) . ' - ' . curl_error($ch));  
}  
curl_close($ch);  
  
// Decode response  
$jsonData = json_decode($response, true);  

// Dump array structure for inspection 
var_dump($jsonData); 

标签: phpbashcurl

解决方案


如果您只需要变量中第 25 行的数字,您可以使用它sed

var=$(sed -n '25s/.*(\([0-9]*\))/\1/p' $file)

推荐阅读