2011-09-18 12:36 @567 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Cliente webservice en Perl
|
Por favor, les agradeceré una ayuda. Debo conectarme a un webservice y solo tengo estos datos. Me han alcanzado un manual y todo parece indicar que es sencillo, pero requiero una ayuda inicial. ¿Cómo llamo al webservice con un script Perl? Solo tengo esto, ¿es suficiente? (los datos son solo supuestos) URL de acceso a servicio: http://test.dominio.com/wsdl/autor.wsdl Using text Syntax Highlighting getAutores
parámetros entrada
IdComercio
IdAutor
parámetros salida
Item
AutorID
AutorName Ademas me alcanzaron (entorno de producción) un usuario y un password, digamos: usuario: xxx pass: 222 ¿Podrían ayudarme? Muchas gracias
|
2011-09-18 17:10 @757 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Cliente webservice en Perl
|
Hay algunos hilos al respecto, con ejemplos. Usa el sistema de búsqueda. Busca por 'WSDL'. Te saldrán hilos como este: Cliente Perl consumiendo servicio Java usando WSDL.
_________________ JF^D Perl programming
|
2011-09-21 22:53 @995 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
|
Gracias por la respuesta: Yo he llegado hasta esto:
#!/usr/bin/perl
my $idcomercio=xxx; my $IDautor=""; #este parámetro de entrada es opcional
use SOAP::Lite; +trace => 'debug'; $service = SOAP::Lite -> uri("http://ws.leer-e.es") -> proxy("http://ws.leer-e.es/wsdl/autor.wsdl"); $result = $service -> getAutores($idcomercio, "$IDautor") -> result; print $result, "\n";
AL MENOS NO ME ARROJA ERROR... PERO ME APARECE UNA PÁGINA EN BLANCO. ¿Por qué? ¿Por favor, podrías ayudarme? ¿Hay algo de código más complejo que añadir? ¿Hay algo que me falta saber del webservice?
|
2011-09-22 07:53 @370 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
|
Gracias por tu respuesta, explorer. En efecto, el script lo estoy probando directamente en mi espacio web, desde un navegador. Cuando lo ejecuto, solo aparece una página en blanco como respuesta.
No tengo la menor idea si al menos logra la conexión o no, porque no me sale ningún error. a lo mejor me he enredado en el uri y el proxy, que no entiendo bien cuál es cuál.
|
2011-09-22 12:45 @573 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Cliente webservice en Perl
|
A ver... ¿has probado a ejecutarlo desde la línea de comandos? Si lo quieres ejecutar desde un navegador, el navegador está esperando una cabecera HTTP estándar. Eso quiere decir que, antes de sacar el resultado, debes enviar una línea con una cabecera MIME como esta: Content-Type: text/html seguida de una línea en blanco, y seguida de un código HTML. Si el resultado que esperas no es HTML, sino, por ejemplo, texto, tienes que poner esta cabecera: Content-Type: text/plain Tu programa quedaría así: Using perl Syntax Highlighting #!/usr/bin/perl
my $idcomercio = 'xxx';
my $IDautor = ""; # este parámetro de entrada es opcional
use SOAP::Lite
+trace => 'debug'
;
$service = SOAP::Lite
-> uri("http://ws.leer-e.es")
-> proxy("http://ws.leer-e.es/wsdl/autor.wsdl")
;
$result = $service -> getAutores($idcomercio, $IDautor);
print "Content-Type: text/plain\n\n";
print $result, "\n";
(He quitado el ->result de la línea 15 y un ';' más arriba, de la 6.)
_________________ JF^D Perl programming
|
2011-09-22 16:21 @723 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
|
Gracias otra vez, explorer. Seguí todas tus sugerencias y agregué la cabecera... ahora me aparece como todo resultado:
1
(el número uno, y nada más).
¿Estoy cerca? ¿Qué significa 1? Se supone que debería darme un listado de autores. A propósito, ¿dónde ubico en este script los parámetros de salida (en este caso AutorID y AutorName)?
|
2011-09-22 17:32 @772 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Cliente webservice en Perl
|
Con la opción 'trace' debería haber salido el trazado de la ejecución. ¿Dónde está? Te aconsejo que mires en los registros de actividad del servidor web (los ficheros log). Yo, la verdad, ejecutaría este programa desde la línea de comandos, en lugar de usar un navegador web, al menos mientras lo desarrollas. El '1' es una buena señal: nos ha devuelto algo, pero no sabemos qué es. Eso depende de la documentación. También podría ser que ese '1' representase que nos ha devuelto un array con un único valor. No sé decirte si el resultado es escalar o lista, porque eso depende de lo que diga la documentación. Si dices que tiene que devolver un listado de autores, entonces me inclino a pensar que sí, que se trata de un arreglo. Cambia la línea 15 por Using perl Syntax Highlighting @result = $service -> getAutores($idcomercio, $IDautor);
use Data::Dumper;
print Dumper \@result;
a ver qué sale...
_________________ JF^D Perl programming
|
2011-09-22 19:33 @856 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
Parece que la luz está cerca... ha aparecido un extensísimo resultado, que la verdad no sé qué es. Te lo adjunto en otra respuesta. La documentación en efecto dice que los parámetros de salida son del tipo array (y podría ser UN resultado, pienso, ya que se trata de un servicio de prueba). La documentación tal cual dice: Using text Syntax Highlighting parámetros de salida
tipo descripción
array matriz con los identificadores de los autores que cumplen los filtros
Item
AutorID
AutorName
... Finalmente este es el script usado: Using perl Syntax Highlighting #!/usr/bin/perl
$id = "64";
$idautor = "";
use SOAP::Lite +trace => 'debug';
$service = SOAP::Lite
-> uri("http://ws.leer-e.es/wsdl/")
-> proxy("http://ws.leer-e.es/wsdl/autor.wsdl");
@result = $service -> getAutores($idcomercio, $idautor);
use Data::Dumper;
print "Content-Type: text/plain\n\n";
print Dumper \@result;
Y EL RESULTADO ARROJADO ES (mejor lo envío en un archivo aparte): La pregunta es: ¿Y ahora? ¿cómo se traduce eso en un resultado?
| Adjuntos: |
Comentario: resultado de la llamada
resultado.txt [76.63 KiB]
14 veces
|
|
2011-09-22 21:03 @919 |
|
|
 |
explorer
Administrador
|
Registrado: 2005-07-24 18:12 @800 Ubicación: Valladolid, España Mensajes: 10249
|
|
|
Re: Cliente webservice en Perl
|
Tienes un error: en la línea 2 defines $id con el valor 64, pero luego no lo usas en ningún sitio. Y en la línea 10 estás usando $idcomercio, que no ha sido definido en ninguna parte. Lo he probado y no me da ningún resultado. Quiero decir, que sí me ha respondido el webservice, pero sin resultados. Con el '64', ¿qué valores deberían salir? Con la opción trace, deberías ver en la salida estándar tanto la petición como la respuesta HTTP. Y el churro que ves salir es el resultado del Dumper. Es el contenido de la respuesta que SOAP::Lite a confeccionado con lo que ha recibido del servidor. En SOAP::SOM hay instrucciones para leer el contenido de la respuesta, pero el caso es que no veo ninguna respuesta: Using xml Syntax Highlighting <?xml version="1.0" encoding="UTF-8"?>
<definitions targetNamespace="urn:Leere"
xmlns:tns="urn:Leere"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
<types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Leere">
<!-- getAutores -->
<xsd:complexType name="getAutoresParams">
<xsd:all>
<xsd:element name="IdComercio" type="xsd:int" />
<xsd:element name="IdEditorial" type="xsd:int" />
</xsd:all>
</xsd:complexType>
<!-- getAutores -->
<xsd:element name="getAutoresRequest" type="tns:getAutoresParams"/>
<xsd:element name="getAutoresResponse" type="xsd:soap_enc_array"/>
</xsd:schema>
</types>
<!-- getAutores -->
<message name="getAutores">
<part name="data" element="tns:getAutoresRequest"/>
</message>
<message name="getAutoresResponse">
<part name="data" element="tns:getAutoresResponse"/>
</message>
<portType name="ServicePortType">
<!-- getAutores -->
<operation name="getAutores">
<documentation>getAutores</documentation>
<input message="tns:getAutores"/>
<output message="tns:getAutoresResponse"/>
</operation>
</portType>
<binding name="ServiceBinding" type="tns:ServicePortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="getAutores">
<soap:operation soapAction="urn:Leere#getAutores" style="rpc"/>
<input>
<soap:body use="encoded" namespace="urn:Leere" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</input>
<output>
<soap:body use="encoded" namespace="urn:Leere" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
</output>
</operation>
</binding>
<service name="Service">
<port name="ProveedorSoap" binding="tns:ServiceBinding">
<soap:address location="http://ws.leer-e.es/index.php/webservices/autor" />
</port>
</service>
</definitions>
Devuelve un XML con 'definiciones', no con la respuesta. Y fíjate que dice que la pregunta sobre getAutores tiene dos argumentos: IdComercio e IdEditorial. ¿La documentación está bien?
_________________ JF^D Perl programming
|
2011-09-23 09:14 @426 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
|
Es verdad, me equivoque en el código: el $id que puse en realidad es $idcomercio.
$idcomercio, en este caso 64, es el código que me identifica o autentifica ante el server (además que ellos tienen registrado ya mi IP).
He hecho la prueba nuevamente pero aparece la misma respuesta extensa. ¿Qué puede ser?
|
2011-09-23 12:10 @548 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
|
Muchas gracias por todo, explorer. Ok, le enviaré el trace... pero una última ayuda en este punto: ¿cuál es el trace? Si lo que sale es el Dumper... ¿Cómo hago para obtener el trace? Se trata del código anterior xml que has pegado en tu post?
Gracias otra vez, este foro es de lo mejor que hay.
|
2011-09-27 18:14 @801 |
|
|
luisbal
Perlero Nuevo
|
Registrado: 2008-09-12 09:36 @442 Mensajes: 16
|
|
|
Re: Cliente webservice en Perl
|
Hola, estimado explorer: estuve trasteando el fin de semana revisando códigos y, aunque no consigo una respuesta válida, al menos el Dumper ya me da algún indicio: Using perl Syntax Highlighting $VAR1 = \[
{
'Error' => {
'text' => 'El parametro IdComercio es obligatorio.',
'code' => '1'
}
}
]; EL PROBLEMA es que no sé por qué me dice eso, cuando el IdComercio lo he especificado. Aquí el script: Using perl Syntax Highlighting #!/usr/bin/perl
$idcomercio = "64";
$ideditorial = ""; #opcional
use SOAP::Lite +trace => 'debug';
use Data::Dumper;
$service = SOAP::Lite
-> uri("http://ws.leer-e.es")
-> service("http://ws.leer-e.es/wsdl/editorial.wsdl"); # me dijeron use service en vez de proxy
my $param1 = SOAP::Data->name('IdComercio')->value('$idcomercio')->type('int');
my $param2 = SOAP::Data->name('IdEditorial')->value('$ideditorial')->type('int');
my $result = $service->getEditoriales(
$param1,
$param2,
);
print "Content-Type: text/plain\n\n";
print $result; #el print $result me arroja "ARRAY(0x9188de4)"
print Dumper \$result;
¿Alguna solución? gracias
|
| Reglas del Foro |
No puedes abrir nuevos temas en este Foro No puedes responder a temas en este Foro No puedes editar tus mensajes en este Foro No puedes borrar tus mensajes en este Foro No puedes enviar adjuntos en este Foro
|
|
Socializa |
 |
|