viernes, 15 de junio de 2012

Ejemplo basico HttpClient

Genexus y Whois API
En este ejemplo vamos a provechar para obtener datos de un dominio registrado como la fecha de expiracion del dominio mediante una "API WebService" "Whois API"
como nota: se deben de registrar a la pagina del api para poder usarla con usuario y contraseña

Variables Definidas
   &StatusCode       Numeric   
   &result       LongVarchar   
   &HttpClient       HttpClient   

Se define el url que accede a el API Whois y Se Ejecuta el URL
&HttpClient.Host= 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=aquivaDominio&username=aquivaUsuario&password=aquiPassword&outputFormat=XML'
&HttpClient.Execute('GET','')

Una vez que se ha ejecutado obtenemos el status HTTP
&StatusCode = &HttpClient.StatusCode
El resultado en una cadena la obtemos asi:
&result = &HttpClient.ToString() //devuelve el string del xml
Si el resultado lo queremos directamente a un archivo se hace de la siguiente forma:
&HttpClient.ToFile('mixml.xml') //devuelve el xml en un archivo

Leer un Elemento de un XML
Supongamos que necesito saber la fecha de vigencia de un dominio, se obtendra leyendo el xml devuelto en &result = &HttpClient.ToString()  de la siguiente forma:

&XMLReader.OpenFromString(&result)
&XMLReader.ReadType(1,'createdDateNormalized')
&Vigencia = &XMLReader.Value

Autentificarse a un Servidor  Proxy con Genexus
Siguiendo en el ejemplo descrito en la parte superior, si ademas de acceder al url del api para obtenr el xml, deben pasar por un Proxy, bueno la solucion es muy simple solo hay que agregar lo siguiente a nuestra variable &HttpClient, este codigo debe ir antes de &HttpClient.Execute
&UserProxy = 'usuario'
&PassProxy = 'pass'
&AdressProxy = 'http://10.65.0.43:8080'
&HttpClient.AddProxyAuthentication(0,&AdressProxy,&UserProxy,&PassProxy)

&HttpClient.Host= 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=aquivaDominio&username=aquivaUsuario&password=aquiPassword&outputFormat=XML'
&HttpClient.Execute('GET','')

Ejemplo Completo
Procedimiento para obtener la fecha de vigencia
Variables Definidas
&StatusCode Numeric
&result LongVarchar
&HttpClient HttpClient
&UrlStringUrlString
&domainNamevarchar
&usernamevarchar
&password varchar
&outputFormat varchar
&AdressProxyvarchar
&UserProxyvarchar
&PassProxyvarchar
&XMLReaderXMLReader
&Vigenciavarchar

Rules:
parm(in:&UserProxy, in:&PassProxy, in:&AdressProxy, in:&username, in:&password, in:&domainName, in:&outputFormat, out:&Vigencia);

Source:
&UrlString = 'www.whoisxmlapi.com/whoisserver/WhoisService?domainName=' + &domainName
&UrlString += &username=' + &username + '&password=' + &password + '&outputFormat='+&outputFormat
&HttpClient.AddProxyAuthentication(0,&AdressProxy,&UserProxy,&PassProxy)
&HttpClient.Host= &UrlString
&HttpClient.Execute('GET','')
&result = &HttpClient.ToString()
&StatusCode = &HttpClient.StatusCode
&XMLReader.OpenFromString(&result)
&XMLReader.ReadType(1,'createdDateNormalized')
&Vigencia = &XMLReader.Value
&Vigencia=TRIM(&Vigencia.Replace(" UTC",""))

descargar ejemplo xpz

Referencias:
whois-api-doc
HttpClient Data Type
XMLReader Data Type

Consumir Web Service:
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?WSDL+Import+Wizard,
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?External+Object%3A+WSDL+%28Web+Service%29,

Consumir Web Service Seguros:
http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Consumir+servicios+web+bajo+https+y%2Fo+autenticaci%C3%B3n,
http://www.genexus.com/noticias/leer-noticia/consumir-servicios-web-bajo-https-y-o-autenticacion?es

3 comentarios:

  1. Necesito saber tambien como armar una variable &httpclient para obtener una respuesta en formato Json.
    Digamos que el link que funciona correctamente utilizando el browser es:
    http://172.30.1.62:8080/poste?objectid=17424&regional=GLR&tramos=1

    ResponderEliminar
    Respuestas
    1. Saludos,
      en el siguiente enlace viene un ejemplo espero te sirva

      http://genexus-mancilla.blogspot.mx/2012/10/ejemplo-servicio-rest-con-genexus-java.html

      Eliminar
  2. Hola, te queria consultar si la cadena que armas con las variables que indicas en el ejemplo como &domainName &username &password &outputFormat es lo mismo que definirlas como &HttpClient.AddVariable('usuario',&username), porque estuve probando y el amado smilar al tuyo me funciona, pero con AddVariable no me responde nada, y no se como capturar el trafico de lo que envia el .execute
    saludos

    ResponderEliminar

Si te ha servido de algo mi aportación, deja tu comentario, gracias