SSL_VERIFYHOST y SSL_VERIFYPEER en xmlhttprequest


([N4] gontorre) #1

Buenos días

Estoy desarrollando la conexión a un webservice de un proveedor y no consigo hacer la llamada. En soporte del proveedor me dicen que la llamada es correcta, pero que segurmanete no tenga desactivado CURLOPT_SSl_VERIFYHOST o CURLOPT_SSL_VERIFYPEER. La url a la que tengo que hacer la peticion es de la forma https://extranet.proveedor.com/api/pedidoWeb

La verdad es que no tengo ni idea de donde tengo que poner esas opciones. El código que estoy utilizando es muy sencillo:

importClass("XMLHttpRequest");

var cURL = theRoot.varToString("XHR_URL")
var lAsincrono = false

var xhr = new XMLHttpRequest()
xhr.timeout = 15000
xhr.responseType = ""

xhr.open("POST", cURL, lAsincrono, "", "");

xhr.send()

theRoot.setVar("XHR_SALIDA", xhr.response)
theRoot.setVar("_NERROR", xhr.errorCode)
theRoot.setVar("_NSTATUS", xhr.status)

Gracias y un saludo


([N3] pacosatu) #2

Hola Gonzalo.

Esas son opciones de la librería Curl.
Seguramente en soporte del webservice han supuesto que estás usando esta librería con código PHP.
Esas opciones tienen que ver con la negociación SSL entre cliente y servidor.

Prueba a realizar la conexión usando una línea de comando de la librería Curl para comprobar que tu equipo negocia correctamente la conexión segura.

Parece ser que la clase XMLHttpRequest del API de Velneo tiene sus peculiaridades respecto a las conexiones seguras y los certificados TSL/SSL.

Ante la falta de documentación y buenos ejemplos, no te queda más remedio que acudir a Soporte.

Saludos
Paco Satué


([N4] gontorre) #3

Me han confirmado en soporte que xmlhttprequest nenesita un https válido. Me han dicho que con curl sí puedo deasctivar la comprobación. Me he descargado el tutor de vcurl y cuando lo ejecuto me da un error.

“No se ha podido cargar la libreria Nombre: vCurlDll.dll ID: VCURL_W”

¿Alguien tiene algún ejemplo de un post realizado con curl?

Ya he comprobado que desde la línea de comandos me funciona la llamada.

Gracias y un saludo


([N1] wikan) #4

Seguramente el error es por que tienes un cliente de 64bits contra la librería de 32bits.

Podrías usarlo por comandos y solventas el impedimento de los bits.


([N4] gontorre) #5

Buenos días

El problema era que tenía que copiar las librerías de curl a la carpeta de Windows. De todas formas, la solución tampoco me sirve porque la conexión con el proveedor se hace con una tarea programada en el vServer y ahí no puedo hacer uso de librerías externas.

Al final me va a tocar tener un cliente que se ejecute periódicamente y haga la conexión mediante curl. Creo que, en este caso, voy a optar por utilizar curl en línea de comandos.

Un saludo


([N4] gontorre) #6

Hola de nuevo

Con respecto al uso de curl a través de la línea de comandos. ¿Tiene alguien un ejemplo de como recibir la respuesta en Velneo del resultado de curl?

Se me ocurre llamar a curl con la instrucción “Lanzar aplicación” o “Ejecutar documento”, pero no se como recibir la respuesta en Velneo.

¿Alguna idea?

Gracias y un saludo


([N3] pacosatu) #7

Hola Gonzalo.

  • Para obtener la salida del comando curl en un fichero necesitas incluir la opción -o “<path_fichero_salida>”

  • Para la conexión SSL sin verificación de certificado necesitas incluir la opción -k

  • Usa el comando de Velneo “Ejecutar comando del sistema”

Aquí tienes toda la información de las opciones de la línea de comandos de la utilidad curl.exe.

Saludos
Paco Satué


([N4] gontorre) #8

Muchas gracias Paco

Redirijo la salida de curl a un fichero con la opcion que me has dicho y luego simplemente abro el fichero y lo parseo.

Un saludo


([N3] pacosatu) #9

Hola Gonzalo.

Sí, efectívamente.

Lo que devuelve el comando cUrl (html, json, xml, …) queda guardado en el fichero que has indicado.
Contiene lo mismo que tendríamos en la propiedad responseText de la clase xmlHttpRequest del API de Velneo.

Si te atrancas con algo puedo preparar un ejemplo.

Saludos
Paco Satué


([N4] gontorre) #10

Gracias Paco

Ya lo tengo funcionando.

Me sirve la experiencia para cuando tenga que ponerme (en breve) a diseñar el sistema de intercambio de información con la AEAT.