【问题标题】:Unable to return CPanel APIv2 json data using shell Curl无法使用 shell Curl 返回 CPanel APIv2 json 数据
【发布时间】:2015-05-01 22:17:28
【问题描述】:

我正在尝试从 CPanel 的 APIv2 返回数据,在以下情况下.. 我正在尝试从客户帐户中提取最后 15 分钟的日志,其中变量 CUSTOMER_USER_NAME 是客户用户名,而 DOMAIN_NAME_FOO.COM 是客户的域名。

curl --insecure https://MASTERUSER:masterhash@MASTERIP_foo:2087/json-api/cpanel?cpanel_jsonapi_apiversion=2&cpanel_jsonapi_user=CUSTOMER_USER_NAME_FOO&cpanel_jsonapi_module=Stats&cpanel_jsonapi_func=lastapachehits&domain=DOMAIN_NAME_FOO.COM

当我运行 Curl 时,返回的 JSON 是:

{"cpanelresult":{"data":{"reason":"User parameter is invalid or was not supplied","result":"0"},"type":"text","error":"User parameter is invalid or was not supplied"}

该用户和域都是 CPanel 帐户,在 PHP 中这有效 -> 管理界面上的 file_get_contents 但是我正在用另一种语言编写这个守护程序,甚至 shell STDOUT 在这里就足够了。

有谁知道我将如何做到这一点?我想我会为我的 Ruby 守护程序框架从 curl 捕获标准输出,如果没有足够的 ruby​​ 之类的方法来执行此操作,则从那里开始。

提前致谢。

【问题讨论】:

    标签: php ruby shell curl cpanel


    【解决方案1】:

    这是我一直在寻找的答案,我自己解决了,以防其他人在使用 ruby​​ 操作 CPanel V2 API 时遇到问题

    require 'httparty' 
    $user = 'v****l'    #master user account username
    $apihash = '86W***********V'     #api hash
    $url = '10.**4.1**.**9'   #sample ip address of server
    
    class Cpanel
      include HTTParty
      base_uri "http://#{$url}:2086/json-api"
    
      def initialize(u, p)
        @auth = {:username => u, :password => p}
      end
    
      # mod = cPanel module
      # function = function, really!
      # args = function's arguments
      def api(mod, func, args={})
        query = { :cpanel_jsonapi_user => @auth[:username],
          :cpanel_jsonapi_module => mod,
          :cpanel_jsonapi_func => func,
          :cpanel_jsonapi_apiversion => 2,
        }
    
        options = {}
        query.merge!(args)
        options.merge!({ :query => query, :basic_auth => @auth })
        result = self.class.post('/cpanel', options)
    
        #result = result.to_hash['cpanelresult']['data']
    
        return result
      end
    end
    
    cpanel = Cpanel.new($user, $apihash)
    puts cpanel.api('Stats', 'lastapachehits', { :domain => 'hu***********.org' })    #where hu**********.org is the account to acquire logs from
    

    这可以重新用于任何 CPanelV2 的 API,只需记住 2087 是 SSL 并且 2086 是加密的。

    【讨论】:

      猜你喜欢
      • 2019-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 2016-04-28
      相关资源
      最近更新 更多