2011-10-21 24 views
6

Estoy intentando generar una biblioteca de Perl para conectarme a un servicio web. Este servicio web está en un servidor HTTPS y mi usuario tiene acceso a él.Perl SOAP :: WSDL que accede a HTTPS Error no desatinado

He ejecutado wsdl2perl.pl varias veces, con diferentes opciones, y siempre falla con el mensaje: Unauthorized at /usr/lib/perl5/site_perl/5.8.8/SOAP/WSDL/Expat/Base.pm line 73. La cosa es que, cuando no me importa mi usuario/contraseña como argumentos, que ni siquiera pregunta por ellos.

He leído [WSDL SOAP :: :: :: Manual Cookbook] (http://search.cpan.org/~mkutter/SOAP-WSDL-2.00.10/lib/SOAP/WSDL/Manual/ Cookbook.pod) y hecho lo que dice sobre HTTPS: Crypt :: SSLeay es instaleld, y se modifican SOAP :: WSDL :: Transport :: HTTP y SOAP :: Transport :: HTTP.

¿Puede darnos alguna pista sobre lo que puede estar yendo mal?

+0

lo siento de verdad por su interés tipo, pero no puedo recordar lo que estaba trabajando en ese entonces. Al mirar mis registros, parece que se me ordenó que me conectara a un Sharepoint WS para recuperar cierta información, así que ahora supongo que necesitaba NTLM auth. Este proyecto ha muerto hace mucho tiempo, así que lo siento mucho por tu esfuerzo. –

Respuesta

0

¿Puede acceder libremente al archivo WSDL desde su navegador web? ¿Puede alguien más en su red acceder a él sin ningún problema?

Tal vez el servidor web que aloja el archivo WSDL requiere Basic o algún otro tipo de autenticación ...

0

Si no es necesario, no te recomiendo utilizar Perl como un cliente de servicios web .Como ya sabes, perl es un lenguaje de código abierto, aunque admite el protocolo soap, pero su soporte no parece muy estándar. Al principio, su documento no es muy claro. Y también, su soporte a veces es limitado. Por último, el error siempre existe aquí. y ahi.

Por lo tanto, si tiene que usar wsdl2perl, puede usar komodo para ingresar al código y averiguar qué sucedió. Esto es exactamente lo que solía hacer cuando utilizaba Perl como cliente de servicio web. En el La parte posterior de https es SSL, por lo tanto, si su SSL está basado en un certificado autorizado, debe configurar su ruta de cert y la lista de certificados de servidor de confianza. Será mejor que utilice Firefox basado en Linux para realizar una prueba. Como yo sepa, puede configurar la ruta de certificación de Firefox y la lista de certificados de confianza de Firefox. Si Firefox puede comunicarse con su servidor de servicio web con éxito, entonces, es hora de depurar su cliente Perl.

0

Para depurar situaciones con Perl y SOAP, interponga un proxy web para que pueda ver exactamente qué datos se pasan y qué respuesta recibe del servidor. Obtuviste un 401 No autorizado, espero, pero puede haber más detalles en la respuesta del servidor.

Ambos Fiddler http://docs.telerik.com/fiddler y Charles proxy https://www.charlesproxy.com/ pueden hacerlo.

0

El mensaje de error se cita parece ser de esta línea: die $response->message() if $response->code() ne '200'; y en el mundo HTTP, Unauthorized es claramente el código de error 401, lo que significa que su sitio web le pide un nombre de usuario y contraseña (muy probablemente, un sitio web puede "secuestro "este código de error para atender otras condiciones como un filtro en la IP de origen). ¿Los tiene?

Si es así, puede

  • después wdsl2perl ha corrido, encuentran en los archivos creados cuando set_proxy() se llama y cambiar la dirección URL en no incluir el nombre de usuario y la contraseña de esa manera: ...->set_proxy('http://USERNAME:[email protected]/...')
  • o su en el código, después de instanciar el objeto SOAP::WSDL, llame al service(SERVICENAME) (para cada servicio que haya definido en su archivo WSDL), que le proporciona un nuevo objeto, al que puede llamar al transport() para acceder al objeto de transporte subyacente al que puede llamar al proxy() con la URL según el formato anterior (sí es proxy() aquí y set_proxy() arriba); o se llama a credentials() en lugar de proxy() y se pasa 4 cuerdas:
    1. 'hostname: port'
    2. el reino, como se indica por el servidor web, pero creo que se puede poner cualquier cosa
    3. el nombre de usuario
    4. la contraseña
Cuestiones relacionadas