Buenas, paso a contaros una variante que voy haciendo mientras voy aprendiendo de qué van los servicios REST. Estoy tratando de adaptar un cliente Perl/JSON para consumir un servicio REST/PHP/JSON. El mismo con un cliente en PHP funciona bien pero al querer conectarme con el ejemplo de use JSON::RPC::Client; da el siguiente error.
Como siempre la idea es comparar códigos y tomar un punto de partida en base a los ejemplos que voy encontrando…
Error :
Script Output :
Executing file : C:\clienteperlphp.pl
Can't use string ("Hello Array!") as a HASH ref while "strict refs" in use at C:/Perl/site/lib/JSON/RPC/Client.pm line 193.
El código del cliente Perl es el siguiente:
use strict;
use warnings;
use JSON::RPC::Client;
my $client = new JSON::RPC::Client;
my $url= 'http://192.168.1.2/service.php/sayHello';
my $valor ;
my %hash ;
my $yourname = 'pedro';
my $llamadodedirecciones = { method => "sayHello", params => [$yourname], };
my $res = $client->call($url, $llamadodedirecciones);
if($res) {
if ($res->is_error) {
print "Error : ", $res->error_message;
}
else {
print $res->result;
}
}
else {
print $client->status_line;
}
$client->prepare($url, ['sayHello', 'echo']);
print $client->sayHello($yourname );
El código del cliente en PHP que funciona es :
<?php
class JSON_WebClient{
private $URL;
public function __construct($url)
{
$this->URL = $url;
}
public function call($method, $args, $successCallback = false, $errorCallback = false)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: application/json"));
curl_setopt($ch, CURLOPT_URL, $this->URL."/".$method);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($args));
$resposeText = curl_exec($ch);
$resposeInfo = curl_getinfo($ch);
if($resposeInfo["http_code"] == 200)
{
if($successCallback)
call_user_func($successCallback, json_decode($resposeText));
}
else
{
if($errorCallback)
call_user_func($errorCallback, json_decode($resposeText));
}
}
}
$client = new JSON_WebClient("http://192.168.1.2/service.php");
$yourname = "pedro";
$client->call("sayHello", $yourname, "onSucceededCallback", "onErrorCallback");
function onSucceededCallback($result)
{
print $result;
}
function onErrorCallback($error)
{
print "Error: ".$error->{"message"};
}
?>