Estimados, quiero compartir mi experiencia en este tema:
Hacer un formulario POST a una web .asp y mostrar datos al usuario:
//Cargar los datos de un HttpClient, ejemplo:
&HttpClient.host = "www.miweb.com"
&HttpClient.base_url = "/form/"
//Cargar las variables en el formulario
&HttpClient.AddVariable(' VARIABLE_Cualquiera', 'Valor_de_la_variable')
&HttpClient.AddVariable(' VARIABLE_Cualquiera2',
'Valor_de_la_variable2')
//Ejecutar
&HttpClient.Execute('POST', 'pagina.asp')
//Si tengo que mostrar el resultado en pantalla o si el usuario tiene
que interactuar con pagina.asp:
//Inserto un textblock con la propiedad Format:HTML en el webform (el
webform solo va a tener este textblock, nada mas)
TextBlock.Caption = &HttpClient.ToString()
//acá toma el control el main.asp con las variables cargadas
//una vez que el main.asp nos devuelve el control (mediante otro
método POST), debemos capturarlo, para eso, main.asp debe llamar a una
de nuestras páginas, por ejemplo, respuesta.aspx pasandole los
parámetros de respuesta.
//Para eso hacemos un nuevo webpanel con nombre respuesta, y
simplemente en el método start usamos el httprequest
//en respuesta.aspx...
Event Start
&VARIABLELOCAL =
&httprequest.GetVariable(" VARIABLEQUEDEVUELVEELPOST")
&VARIABLELOCAL2 =
&httprequest.GetVariable(" VARIABLEQUEDEVUELVEELPOST2")
EndEvent
Gracias a Cristian Barreto
________________________________________________________________________________
Hacer un formulario POST a una web .asp y mostrar datos al usuario:
//Cargar los datos de un HttpClient, ejemplo:
&HttpClient.host = "www.miweb.com"
&HttpClient.base_url = "/form/"
//Cargar las variables en el formulario
&HttpClient.AddVariable('
&HttpClient.AddVariable('
'Valor_de_la_variable2')
//Ejecutar
&HttpClient.Execute('POST', 'pagina.asp')
//Si tengo que mostrar el resultado en pantalla o si el usuario tiene
que interactuar con pagina.asp:
//Inserto un textblock con la propiedad Format:HTML en el webform (el
webform solo va a tener este textblock, nada mas)
TextBlock.Caption = &HttpClient.ToString()
//acá toma el control el main.asp con las variables cargadas
//una vez que el main.asp nos devuelve el control (mediante otro
método POST), debemos capturarlo, para eso, main.asp debe llamar a una
de nuestras páginas, por ejemplo, respuesta.aspx pasandole los
parámetros de respuesta.
//Para eso hacemos un nuevo webpanel con nombre respuesta, y
simplemente en el método start usamos el httprequest
//en respuesta.aspx...
Event Start
&VARIABLELOCAL =
&httprequest.GetVariable("
&VARIABLELOCAL2 =
&httprequest.GetVariable("
EndEvent
Gracias a Cristian Barreto
________________________________________________________________________________
Tipo de Datos HttpClient, HttpResponse y HttpRequest
Introducción
Esta funcionalidad provee a los usuarios GeneXus una forma
de poder utilizar el protocolo HTTP en sus programas. Para ello se crearon los
tipos de datos HttpClient, HttpResponse y HttpRequest.
Alcance
Objetos: HttpClient
(Transacciones, Work Panels, Web Transactions, Web Panels, Reportes,
Procedimientos), HttpResponse y HttpRequest (Procedimientos y Reportes con el
valor http en la propiedad call protocol, Web Panels y WebTransactions).
Lenguajes: Java – Visual
Basic – Visual Fox– C/SQL – C#.
Interfaces: Web Form, Win Form.
Interfaces: Web Form, Win Form.
Descripción
Los tres tipos de datos que se definen para interactuar con
http son:
HttpClient
Permite armar un request, enviarlo a una URL y leer los
resultados.
HttpResponse y HttpRequest
Permiten leer los datos del request y grabar el response.
Son objetos disponibles solo en WebProcs.
HttpClient
Este objeto refleja una conexión http. Puede usarse desde
cualquier objeto GeneXus.
Propiedades:
Host
Define el
nombre del host.
Tipo- String
Port
Define el puerto
del host.
Tipo- String
Secure
Indica si el
protocolo es http o https.
Tipo- Boolean
Timeout
Determina el
Timeout de la conexión.
Tipo- Integer
BaseURL
Indica la
URL base de los request que se hagan al host.
Tipo- String
StatusCode
Retorna el
código de error HTTP.
Tipo- Integer
ReasonLine
Retorna el
texto del error HTTP.
Tipo- String
ErrCode
Retorna si ocurrió algún error en
algún comando, en cuyo caso retorna un valor distinto de cero.
Tipo- Integer
ErrDescription
Retorna el menaje del error si
ocurrió alguno en algún comando.
Tipo- String
Basic y Digest
Son constantes que
determinan un tipo de autenticación. Se utilizan en el método
AddAuthentication.
Basic=0 : Para autentificar
se envía el usuario y password sin encriptar.
Digest=1: Para autentificar
se envía el usuario y password encriptados.
ProxyHost y ProxyPort
Permiten especificar un
proxy http. En ambiente windows se utiliza automáticamente el que esta
configurado en la máquina.
ProxyHost- String
ProxyPort- Integer
Métodos
AddHeader(<Name>,
<Value>)
Agrega un
header con el valor dado.
Ejemplo:
AddHeader(“User-Agent”, “GeneXus”)
<Name>- String
<Value>- String
AddVariable(<Name>,<Value>)
Agrega
una variable al ‘form’.
Ejemplo: AddVariable(“CliCod”,
&CliCod)
<Name>- String
<Value>- String
AddString(<Value>)
Agrega el
contenido del string al buffer de datos a enviar.
<Value>- String
AddFile(<Value>)
Agrega el
contenido del archivo al buffer de datos a enviar.
<Value>- String
Execute(<Method>,<URL>)
Ejecuta un método en la URL
definida. Se pondría solo la parte final de la URL
Ejemplo:
execute("POST", "/servlet/awebproc")
<Method>- String
<URL>- String
ToString()
Retorna un String con todo
el ‘cuerpo’ del response.
ToFile(<FileName>)
Graba en un archivo el contenido
del stream.
<FileName>- String
GetHeader(<Name>,<Value>)
Retorna en <Value> el valor
del header convertido al tipo de la variable.
<Name>- String
<Value>- Anytype
AddAuthentication(<Method>, <Realm>,
<User>, <Password>)
Se autentifica con
<User> y <Password> al dominio <Realm> utilizando el tipo de
autenticación <Method>
<Method>- Integer (Pueden utilizarse las
propiedades Basic y Digest)
<Realm>- String
<User>- String
<Password>- String
HttpRequest
Este objeto permite leer el request http. Puede
instanciarse solo en el contexto de un WebProc.
PROPIEDADES
Method
Retorna el
método HTTP.
Tipo- String
ServerHost
Retorna el
nombre del servidor
Tipo- String
ServerPort
Retorna el
puerto en el servidor
Tipo- Integer
Secure
Indica si se esta utilizando HTTPS.
Si el valor retornado es 1, se esta utilizando HTTPS; si es 0, se esta
utilizando http.
Tipo- Integer
ScriptPath
Retorna la porción de URL
correspondiente el nombre del directorio virtual.
Tipo- String
ScriptName
Retorna el nombre del objeto con la
extensión correspondiente que se esta ejecutando, tal como aparece en la URL
Tipo- String
Referrer
Retorna la URL del llamador
Tipo-String
QueryString
Retorna la porción de la URL que
está después del signo “?”; o sea los parámetros.
Tipo- String
RemoteAddress
Devuelve la dirección del cliente.
Tipo- String
ErrCode
Retorna si ocurrió algún error en
algún comando, en cuyo caso retorna un valor distinto de cero.
Tipo- Integer
ErrDescrption
Retorna el menaje del error si
ocurrió alguno en algún comando.
Tipo- String
Métodos
GetVariable(<Variable>)
Retorna en un String el valor con el que viene cargada la
<Variable> en el post.
<Variable>- String
GetHeader(<Header>)
Retorna un String con el valor del header
<Header>.
<Header>- String
ToString()
Retorna un String con todo el ‘cuerpo’ del
request.
ToFile(<FileName>)
Graba en un archivo el contenido
del stream.
<FileName>- String
HttpResponse
Este objeto permite escribir el response http. Puede
instanciarse solo en el contexto de un WebProc.
PROPIEDADES
ErrCode
Retorna si ocurrió algún error en
algún comando, en cuyo caso retorna un valor distinto de cero.
Tipo- Integer
ErrDescrption
Retorna el menaje del error si
ocurrió alguno en algún comando.
Tipo- String
Metodos
AddHeader(<Name>,<Value>)
Agrega un
header con el valor dado.
Ejemplo:
AddHeader(“User-Agent”, “GeneXus”)
<Name>- String
<Value>- String
AddString(<Value>)
Agrega el
contenido del string al buffer de datos a enviar.
<Value>- String
AddFile(<Value>)
Agrega el
contenido del archivo al buffer de datos a enviar.
<Value>- String
Interacción con XML
Estos objetos permiten la interacción con los objetos XMLReader y XMLWriter.
Para ello existen los siguientes métodos:
XMLReader.openRequest(HttpRequest)
Se utiliza en un WebProc para leer un xml que viene en el
body del http request.
XMLReader.openResponse(HttpClient)
Se utiliza en cualquier objeto para leer como XML lo que
devolvió un request.
XMLWriter.openRequest(HttpClient)
Se utiliza para enviar un XML en el body de un http request.
XMLWriter.openResponse(HttpResponse)
Se utiliza en un WebProc para escribir un xml que se
retornara en el body del http response.
Ejemplo
Este ejemplo muestra como un objeto GeneXus llama a otro vía
http, pasándole parámetros en un XML y recibiendo los mismos también en un XML.
El XML a enviar tiene la forma
<parameters>
<a>valor</a>
<b>valor</b>
</parameters>
El XML que se devuelve es igual, con los valores de ‘A’ y
‘B’ modificados.
El programa ‘cliente’ sería:
&Client de tipo HttpClient
&Writer de tipo XMLWriter
&Reader de tipo XMLReader
// Determino
el host y el puerto a donde hacer el request
&client.host =
"localhost"
&client.port = 88
// Agrego el
XML al request
&writer.openRequest(&client)
&writer.WriteStartElement("parameters")
&writer.WriteElement("a",
&A)
&writer.WriteElement("b",
&B)
&writer.WriteEndElement()
&writer.close()
// Hago el
POST al webproc
&client.execute("POST",
"/servlet/awebproc")
// Leo el XML
que devuelve y lo cargo en las variables internas
&reader.openResponse(&client)
&reader.read()
&reader.read()
&a = val(&reader.value)
&reader.read()
&b = val(&reader.value)
&reader.close()
El programa ‘servidor’ seria el siguiente WebProc:
&Request de tipo HttpRequest
&Response de tipo HttpResponse
&Writer de tipo XMLWriter
&Reader de tipo XMLReader
// Leo los
parámetros del XML
&reader.openRequest(&Request)
&reader.read()
&reader.read()
&a = val(&reader.value)
&reader.read()
&b = val(&reader.value)
&reader.close()
// Le sumo uno a cada valor
&a = &a + 1
&b = &b + 1
// Grabo los parámetros en el
response
&writer.openResponse(&Response)
&writer.WriteStartElement("parameters")
&writer.WriteElement("a", &A)
&writer.WriteElement("b", &B)
&writer.WriteEndElement()
&writer.close()
Consideraciones para el generador Java
En el caso de que se ejecute el motor de servlet en Windows,
la aplicación obtendrá automáticamente la configuración del proxy http y la
lista de hosts para los que no se debe utilizar el proxy.
En caso de que se ejecute en otra plataforma, es necesario
especificar el proxy como una ‘System Property’ desde la línea de comandos del
intérprete, por ej:
java -Dhttp.proxyHost=your.proxy.com -Dhttp.proxyPort=XX
<mainclass>
(Consideraciones Generales)
La propiedad secure del tipo de datos HTTPClient en el
generador C/SQL solo puede ser utilizada en clientes Microsoft.
No hay comentarios:
Publicar un comentario