2013-10-20 60 views
1

我配置和使用本教程(它等同于比特币守护程序)建立的莱特币守护程序:https://forum.litecoin.net/index.php?topic=43.0拒绝JSON RPC连接/ PHP?

所有是好的,但,当我尝试通过下面的代码(thesite远程发送命令到它.COM被替换为我的实际IP,同样具有用户:通过)

$litecoin = new jsonRPCClient('http://user:[email protected]:8332/'); 
    echo $litecoin->getinfo(); 

在我litecoin.conf文件,我有:

rpcallowip=1.1.1.1 
rpcallowport=8332 
server=1 
daemon=1 
rpcuser=user 
rpcpassword=pass 

它返回此错误:

警告:fopen(http://[email protected]:8332/):未能打开流:连接在132行/var/www/html/gawk/jsonRPCClient.php中被拒绝致命错误:未收集异常'异常',消息'无法连接到http://user:[email protected]:8332/'在/var/www/html/gawk/jsonRPCClient.php:140堆栈跟踪:#0 /var/www/html/gawk/index.php(27):jsonRPCClient - > __ call('getinfo',Array)#1/var/www/html/gawk/index.php(27):jsonRPCClient-> getinfo()#2 {main}抛出/var/www/html/gawk/jsonRPCClient.php on line 140

它工作时我在本地发送命令(来自托管守护进程的服务器),但我需要能够远程发送命令。

我使用下面的JSON-RPC类:

<?php 
/* 
        COPYRIGHT 

Copyright 2007 Sergio Vaccaro <[email protected]> 

This file is part of JSON-RPC PHP. 

JSON-RPC PHP is free software; you can redistribute it and/or modify 
it under the terms of the GNU General Public License as published by 
the Free Software Foundation; either version 2 of the License, or 
(at your option) any later version. 

JSON-RPC PHP is distributed in the hope that it will be useful, 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
GNU General Public License for more details. 

You should have received a copy of the GNU General Public License 
along with JSON-RPC PHP; if not, write to the Free Software 
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 
*/ 

/** 
* The object of this class are generic jsonRPC 1.0 clients 
* http://json-rpc.org/wiki/specification 
* 
* @author sergio <[email protected]> 
*/ 
class jsonRPCClient { 

    /** 
    * Debug state 
    * 
    * @var boolean 
    */ 
    private $debug; 

    /** 
    * The server URL 
    * 
    * @var string 
    */ 
    private $url; 
    /** 
    * The request id 
    * 
    * @var integer 
    */ 
    private $id; 
    /** 
    * If true, notifications are performed instead of requests 
    * 
    * @var boolean 
    */ 
    private $notification = false; 

    /** 
    * Takes the connection parameters 
    * 
    * @param string $url 
    * @param boolean $debug 
    */ 
    public function __construct($url,$debug = false) { 
     // server URL 
     $this->url = $url; 
     // proxy 
     empty($proxy) ? $this->proxy = '' : $this->proxy = $proxy; 
     // debug state 
     empty($debug) ? $this->debug = false : $this->debug = true; 
     // message id 
     $this->id = 1; 
    } 

    /** 
    * Sets the notification state of the object. In this state, notifications are performed, instead of requests. 
    * 
    * @param boolean $notification 
    */ 
    public function setRPCNotification($notification) { 
     empty($notification) ? 
          $this->notification = false 
          : 
          $this->notification = true; 
    } 

    /** 
    * Performs a jsonRCP request and gets the results as an array 
    * 
    * @param string $method 
    * @param array $params 
    * @return array 
    */ 
    public function __call($method,$params) { 

     // check 
     if (!is_scalar($method)) { 
      throw new Exception('Method name has no scalar value'); 
     } 

     // check 
     if (is_array($params)) { 
      // no keys 
      $params = array_values($params); 
     } else { 
      throw new Exception('Params must be given as array'); 
     } 

     // sets notification or request task 
     if ($this->notification) { 
      $currentId = NULL; 
     } else { 
      $currentId = $this->id; 
     } 

     // prepares the request 
     $request = array(
         'method' => $method, 
         'params' => $params, 
         'id' => $currentId 
         ); 
     $request = json_encode($request); 
     $this->debug && $this->debug.='***** Request *****'."\n".$request."\n".'***** End Of request *****'."\n\n"; 

     // performs the HTTP POST 
     $opts = array ('http' => array (
          'method' => 'POST', 
          'header' => 'Content-type: application/json', 
          'content' => $request 
          )); 
     $context = stream_context_create($opts); 
     if ($fp = fopen($this->url, 'r', false, $context)) { 
      $response = ''; 
      while($row = fgets($fp)) { 
       $response.= trim($row)."\n"; 
      } 
      $this->debug && $this->debug.='***** Server response *****'."\n".$response.'***** End of server response *****'."\n"; 
      $response = json_decode($response,true); 
     } else { 
      throw new Exception('Unable to connect to '.$this->url); 
     } 

     // debug output 
     if ($this->debug) { 
      echo nl2br($debug); 
     } 

     // final checks and return 
     if (!$this->notification) { 
      // check 
      if ($response['id'] != $currentId) { 
       throw new Exception('Incorrect response id (request id: '.$currentId.', response id: '.$response['id'].')'); 
      } 
      if (!is_null($response['error'])) { 
       throw new Exception('Request error: '.$response['error']); 
      } 

      return $response['result']; 

     } else { 
      return true; 
     } 
    } 
} 
?> 

有谁知道什么地方出错了?

回答

0

更改此代码:

rpcallowip=1.1.1.1 

要知道,虽然,这暴露你的端口带来安全问题。从配置文件:

# By default, only RPC connections from localhost are allowed. Specify 
# as many rpcallowip= settings as you like to allow connections from 
# other hosts (and you may use * as a wildcard character). 
# NOTE: opening up the RPC port to hosts outside your local 
# trusted network is NOT RECOMMENDED, because the rpcpassword 
# is transmitted over the network unencrypted.