【问题标题】:Grab specific line from a CURL response从 CURL 响应中获取特定行
【发布时间】:2021-11-05 14:10:45
【问题描述】:

我正在研究 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); 

【问题讨论】:

    标签: php bash curl


    【解决方案1】:

    你可以使用 sed 来做到这一点

    从文件中读取第 25 行

    line=$(sed '25!d' file)
    

    删除括号前后的所有内容

    echo ${line}  | sed 's/.*(//g' | sed 's/).*//g'
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不客气。如果它是您问题的可接受解决方案,请接受答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 2019-08-26
      • 2012-04-02
      • 1970-01-01
      相关资源
      最近更新 更多