Saltar al contenido principal
Versión: 20

HTTPRequest

La clase HTTPRequest permite manejar objetos HTTPRequest que pueden ser utilizados para configurar y enviar peticiones a un servidor HTTP, así como para procesar las respuestas del servidor HTTP.

La clase HTTPRequest está disponible en el almacén de clases 4D. Para crear y enviar peticiones HTTP se utiliza la función 4D.HTTPRequest.new(), que devuelve un objeto HTTPRequest.

Histórico
LanzamientoModificaciones
19 R6Clase añadida

Ejemplo

Crear una clase MyHttpRequestOptions para las opciones de la petición:

Class constructor($method : Text; $headers : Object; $body : Text)
This.method:=$method
This.headers:=$headers
This.body:=$body

Function onResponse($request : 4D.HTTPRequest; $event : Object)
// Mi método onResponse, si quiere manejar la petición de forma asíncrona

Function onError($request : 4D.HTTPRequest; $event : Object)
// Mi método onError, si quiere manejar la petición de forma asíncrona

Ahora puede crear su petición:

var $headers : Object
$headers:=New object()
$headers["field1"]:="value1"

var myHttpRequestOptions : cs.MyHttpRequestOptions
myHttpRequestOptions := cs.MyHttpRequestOptions.new("GET"; $headers; "")

var $request : 4D.HTTPRequest
$request:=4D.HTTPRequest.new("www.google.com"; myHttpRequestOptions)
$request.wait() // Si desea gestionar la solicitud de forma sincrónica
// Ahora puede utilizar $request.response para acceder al resultado de la petición o $request.error para comprobar el error que se ha producido.

Objeto HTTPRequest

Un objeto HTTPRequest es un objeto no compartible.

Los objetos HTTPRequest ofrecen las siguientes propiedades y funciones:

dataType: Text    el dataType pasado en el objeto options al llamar new(), "auto" si se omite
encoding: Text    el encoding pasado en el objeto options al llamar new(), "UTF-8" si se omite
errors: Collection    la colección de todos los errores si se ha producido al menos un error
headers: Object    los headers pasados en el objeto options al llamar a new()
method: Text    el method pasado en el objeto options al llamar a new()
protocol: Text    el protocol pasado en el objeto options al llamar a new()
response: Object    la respuesta a la petición si ha recibido al menos el código de estado, indefinido en caso contrario
returnResponseBody: Boolean    el returnResponseBody pasado en el objeto options al llamar a new()
.terminate()    aborta la petición HTTP
terminated: Boolean    True si la solicitud ha terminado (después de la llamada a onTerminate), falso en caso contrario
timeout: Real    el timeout pasado en el objeto options< al llamar a new()
url: Text    la URL de la petición HTTP
.wait( { time : Real } ) : 4D.HTTPRequest    espera la respuesta del servidor

4D.HTTPRequest.new()

Histórico
LanzamientoModificaciones
20Validación TLS por defecto
19 R7Soporte de propiedades automaticRedirections y decodeData

4D.HTTPRequest.new( url : Text { ; options : Object } ) : 4D.HTTPRequest

ParámetrosTipoDescripción
urlText->URL a la que enviar la solicitud
optionsObject->Propiedades de configuración de la petición
Result4D.HTTPRequest<-Nuevo objeto HTTPRequest

|

Descripción

La función 4D.HTTPRequest.new() crea y envía una petición HTTP al servidor HTTP definido en la url< con las opciones definidas, y devuelve un objeto 4D.HTTPRequest.

El objeto HTTPRequest devuelto se utiliza para procesar las respuestas del servidor HTTP y llamar a los métodos.

En url, pase la URL a la que desea enviar la petición. La sintaxis a utilizar es:

{http://}[{user}:[{password}]@]host[:{port}][/{path}][?{queryString}]
{https://}[{user}:[{password}]@]host[:{port}][/{path}][?{queryString}]

Si omite la parte del esquema (http:// o https://), se envía una solicitud https.

Por ejemplo, puede pasar las siguientes cadenas:

    http://www.myserver.com
www.myserver.com/path
http://www.myserver.com/path?name="jones"
https://www.myserver.com/login
http://123.45.67.89:8083
http://john:smith@123.45.67.89:8083
http://[2001:0db8:0000:0000:0000:ff00:0042:8329]
http://[2001:0db8:0000:0000:0000:ff00:0042:8329]:8080/index.html (**)

parámetro options

En el parámetro options, pase un objeto que pueda contener las siguientes propiedades:

PropiedadTipoDescripciónPor defecto
automaticRedirectionsBooleanSi es true, las redirecciones se realizan automáticamente (se gestionan hasta 5 redirecciones, se devuelve la 6ª respuesta de redirección si la hay)True
bodyVariantCuerpo de la petición (necesario en el caso de las peticiones post o put). Puede ser un texto, un blob, o un objeto. El content-type se determina a partir del tipo de esta propiedad a menos que se defina dentro de los encabezadosindefinido
certificatesFolderFolderDefine la carpeta de certificados de cliente activaindefinido
dataTypeTextTipo de atributo del cuerpo de la respuesta. Valores: "text", "blob", "object", o "auto". Si "auto", el tipo de contenido del cuerpo se deducirá de su tipo MIME (object para JSON, texto para texto, javascript, xml, mensaje http y formulario codificado en url, blob en caso contrario)"auto"
decodeDataBooleanSi es true, los datos recibidos en la retrollamada onData se descomprimenFalse
encodingTextSe utiliza sólo en caso de peticiones con un body (métodos post o put). Codificación del contenido del cuerpo de la petición si es un texto, se ignora si se define content-type dentro de los encabezados"UTF-8"
headersObjectEncabezados de la petición. Sintaxis: headers.key=value (valor puede ser una Colección si la misma llave debe aparecer varias veces)Objeto vacío
methodText"POST", "GET" u otro método"GET"
minTLSVersionTextDefine la versión mínima de TLS: "TLSv1_0", "TLSv1_1", "TLSv1_2", "TLSv1_3""TLSv1_2"
onDataFunctionRetrollamada cuando se reciben los datos del cuerpo. Recibe dos objetos como parámetros (ver más abajo)indefinido
onErrorFunctionRetrollamada cuando ocurre un error. Recibe dos objetos como parámetros (ver más abajo)indefinido
onHeadersFunctionRetrollamada cuando se reciben los encabezados. Recibe dos objetos como parámetros (ver más abajo)indefinido
onResponseFunctionRetrollamada cuando se recibe una respuesta. Recibe dos objetos como parámetros (ver más abajo)indefinido
onTerminateFunctionRetrollamada cuando la petición haya terminado. Recibe dos objetos como parámetros (ver más abajo)indefinido
protocolText"auto" o "HTTP1". "auto" significa HTTP1 en la implementación actual"auto"
proxyAuthenticationauthentication objectAutenticación del proxy de gestión de objetosindefinido
serverAuthenticationauthentication objectAutenticación del servidor de gestión de objetosindefinido
returnResponseBodyBooleanSi false, el cuerpo de la respuesta no se devuelve en el objeto response. Devuelve un error si es false y onData es indefinidoTrue
timeoutRealTiempo de espera en segundos. Indefinido = sin tiempo de esperaIndefinido
validateTLSCertificateBooleanSi false, 4D no valida el certificado TLS y no devuelve un error si no es válido (es decir, caducado, autofirmado...). Importante: en la implementación actual, la propia Autoridad de Certificación no se verifica.True

Función callback (retrollamada)

Todas las funciones de retrollamada reciben dos parámetros objeto:

ParámetrosTipo
$param1objeto HTTPRequest
$param2Event objeto

Esta es la secuencia de llamadas de retorno:

  1. onHeaders se llama siempre una vez

  2. onData se llama cero o varias veces (no se llama si la petición no tiene cuerpo)

  3. Si no se produce ningún error, onResponse se llama siempre una vez

  4. Si se produce un error, onError se ejecuta una vez (y termina la petición)

  5. onTerminate se ejecuta siempre una vez

objeto evento

Un objeto event se devuelve cuando se llama una funcipon de retrollamada. Contiene las siguientes propiedades:

PropiedadTipoDescripción
.datablobDatos recibidos. Siempre es undefined excepto en la retrollamada onData
.typetextTipo de evento. Valores posibles: "response", "error", "headers", "data", o "terminate

authentication object

Un objeto authentication maneja la propiedad options.serverAuthentication o options.proxyAuthentication. Puede contener las siguientes propiedades:

PropiedadTipoDescripciónPor defecto
nameTextNombre usado para la autenticaciónindefinido
contraseñaTextContraseña utilizada para la autenticaciónindefinido
methodTextMétodo utilizado para la autenticación: "basic", "digest", "auto""auto"

.dataType

dataType: Text

Descripción

La propiedad .dataType contiene el dataType pasado en el objeto options al llamar new(), "auto" si se omite.

.encoding

encoding: Text

Descripción

La propiedad .encoding contiene el encoding pasado en el objeto options al llamar new(), "UTF-8" si se omite.

.errors

errors: Collection

Descripción

La propiedad .errors contiene la colección de todos los errores si se ha producido al menos un error.

Este es el contenido de la propiedad .errors:

PropiedadTipoDescripción
errorsCollectionPila de error 4D en caso de error
[].errCodeNumberCódigo de error 4D
[].messageTextDescripción del error 4D
[].componentSignatureTextFirma del componente interno que ha devuelto el error

.headers

headers: Object

Descripción

La propiedad .headers contiene los headers pasados en el objeto options al llamar a new(). Si se omite, contiene un objeto vacío.

.method

method: Text

Descripción

La propiedad .errors contiene el method pasado en el objeto options al llamar a new(). .

.protocol

protocol: Text

Descripción

La propiedad .protocol contiene el protocol pasado en el objeto options al llamar a new(). Si se ha omitido o si se ha utilizado "auto", contiene la versión del protocolo utilizada.

.response

Histórico
LanzamientoModificaciones
19 R8.headers devuelve los nombres en minúsculas. Nueva propiedad .rawHeaders

response: Object

Descripción

La propiedad .response contiene la respuesta a la petición si ha recibido al menos el código de estado, indefinido en caso contrario.

Un objeto response es un objeto no compartible. Ofrece las siguientes propiedades:

PropiedadTipoDescripción
.bodyVariantCuerpo de la respuesta. El tipo del mensaje se define según la propiedad dataType. Indefinido si el cuerpo no se ha recibido todavía
.headersObjectEncabezados de la respuesta. Los nombres de los encabezados se devuelven en minúsculas. <headername>.key = valor (el valor puede ser una colección si la misma llave aparece varias veces). Indefinido si el los encabezados no se ha recibido aún.
.statusNumberCódigo de estado de la respuesta
.statusTextTextMensaje explicando el código de estado
.rawHeadersObjectEncabezados de la respuesta. Los nombres de los encabezadoss se devuelven intactos (con sus mayúsculas y minúsculas originales). <headerName>.key = valor (el valor puede ser una colección si la misma llave aparece varias veces). Indefinido si el los encabezados no se ha recibido aún.

.returnResponseBody

returnResponseBody: Boolean

Descripción

La propiedad .returnResponseBody contiene el returnResponseBody pasado en el objeto options al llamar a new(). Si se omite, contiene True.

.terminate()

.terminate()

| Parámetros | Tipo | | Descripción | | ---------- | ---- |::| ------------------------------------------------------- | | | | | No requiere ningún parámetro|

|

Descripción

Esta función es hilo seguro.

La función .terminate() aborta la petición HTTP. .

.terminated

terminated: Boolean

Descripción

La propiedad .terminated contiene True si la solicitud ha terminado (después de la llamada a onTerminate), falso en caso contrario.

.timeout

timeout: Real

Descripción

La propiedad .timeout contiene el timeout pasado en el objeto options< al llamar a new(). .

.url

url: Text

Descripción

La propiedad .url contiene la URL de la petición HTTP.

.wait()

.wait( { time : Real } ) : 4D.HTTPRequest

ParámetrosTipoDescripción
timeReal->Tiempo máximo en segundos para esperar la respuesta
Result4D.HTTPRequest<-Objeto HTTPRequest

|

Descripción

Esta función es hilo seguro.

The 4D.HTTPRequest.wait() function espera la respuesta del servidor.

Si se pasa un parámetro time, la función esperará como máximo el número de segundos definido.

Si la respuesta del servidor ya ha llegado, la función regresa inmediatamente.

During a .wait() execution, callback functions are executed, whether from other HTTPRequest or SystemWorker instances, or other CALL WORKER calls. Se puede salir de un .wait() llamando a terminate() desde una retrollamada.