Saltar al contenido principal
Versión: Siguiente

HTTPRequest

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

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

Historia
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:

agent : 4D.HTTPAgent
el objeto agent pasado en options o el objeto agente global si se omitió
dataType : Text
el dataType pasado en el objeto options al llamar a new(), "auto" si se omitió
encoding : Text
el encoding pasado en el objeto options al llamar a new(), "UTF-8" si se omitió
errors : Collection
la colección de todos los errores si se ha generado 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 solicitud si ha recibido al menos el código de estado, de lo contrario undefined
returnResponseBody : Boolean
el returnResponseBody pasado en el objeto options al llamar a new()
.terminate()
interrumpe la solicitud HTTP
terminated : Boolean
True si la solicitud es terminada (después de la llamada a onTerminate), false de lo contrario
timeout : Real
el timeout pasado en el objeto options al llamar a new()
url : Text
la URL de la solicitud HTTP
.wait( { time : Real } ) : HTTPRequestClass
espera la respuesta del servidor

4D.HTTPRequest.new()

Historia
LanzamientoModificaciones
20Validación TLS por defecto
19 R7Soporte de las 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 solicitud HTTP al servidor HTTP definido en 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 se omite la parte "scheme" (http:// o https://), se envía una petición 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 puede contener las siguientes propiedades:

PropiedadTipoDescripciónPor defecto
agent4D.HTTPAgentHTTPAgent a utilizar para la HTTPRequest. Las opciones del agente se fusionarán con las opciones de la petición (las opciones de la petición tienen prioridad). Si no se define un agente específico, se utiliza un agente global con valores predeterminados.Objeto agente global
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 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 (value 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"
proxyAuthenticationobjeto de autenticaciónAutenticación del proxy de gestión de objetosindefinido
serverAuthenticationobjeto de autenticaciónAutenticació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 undefinedTrue
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
$param2Objeto Event

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 ha producido ningún error, onResponse siempre se llama 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

info

Para que las funciones de retrollamada se llamen cuando no utilice wait() (llamada asíncrona), el proceso debe ser un worker creado con CALL WORKER, NO New process.

objeto evento

Un objeto event es devuelto cuando una función de callback es llamada. 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 de autenticación 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"

HTTP Parse message

Historia
LanzamientoModificaciones
20 R4Añadidos

HTTP Parse message( data : Text ) : Object
HTTP Parse message( data : Blob ) : Object

ParámetrosTipoDescripción
dataText, Blob->Datos a analizar
ResultObject<-Objeto, cada propiedad es parte de los datos de varias partes

Descripción

El comando HTTP Parse message analiza un texto o un blob multipart/form-data (mensaje HTTP "response") y extrae el contenido a un objeto. Cada propiedad del objeto devuelto corresponde a una parte de los datos multiparte.

info

El propio HTTP es un protocolo de comunicación sin estado. En este marco, los clientes inician la comunicación enviando mensajes de "petición" a los servidores, especificando detalles como el método, el objetivo, los encabezados, el contenido, etc. Los servidores, a su vez, responden con mensajes de "respuesta" que incluyen los mismos detalles. HTTP Parse message analiza el mensaje "request" o "response" en un objeto estructurado.

Ejemplo

En el siguiente ejemplo, analizamos los datos de un archivo de texto que contiene peticiones HTTP.

Este es el contenido del archivo:

POST /batch/gmail/v1/ HTTP/1.1
Accept-Encoding: gzip, deflate
Authorization: Bearer xxxxxx
Connection: Close
Content-Length: 442
Content-Type: multipart/mixed; boundary=batch_19438756D576A14ABA87C112F56B9396; charset=UTF-8
Date: Wed, 29 Nov 2023 13:51:35 GMT
Host: gmail.googleapis.com
User-Agent: 4D/20.4.0


--batch_19438756D576A14ABA87C112F56B9396
Content-Type: application/http
Content-ID: <item1>

GET https://gmail.googleapis.com/gmail/v1/users/me/messages/18c1b58689824c92?format=raw HTTP/1.1


--batch_19438756D576A14ABA87C112F56B9396
Content-Type: application/http
Content-ID: <item2>

GET https://gmail.googleapis.com/gmail/v1/users/me/messages/18c1b58642b28e2b?format=raw HTTP/1.1

--batch_19438756D576A14ABA87C112F56B9396--

Para analizar el archivo:

var $message : Text:=File("/RESOURCES/HTTPrequest.txt").getText()
var $parsedMessage : Object:=HTTP Parse message($message)
//$parsedMessage= {
//headers:{"User-Agent":"4D/20.4.0",...},
//parts:[{"contentType":"application/http","contentID":"item1",...}],
//requestLine:"POST /batch/gmail/v1/ HTTP/1.1"
//}

.agent

agent : 4D.HTTPAgent

Descripción

La propiedad .agent contiene el objeto agent pasado en options o el objeto agente global si se omitió.

.dataType

dataType : Text

Descripción

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

.encoding

encoding : Text

Descripción

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

.errors

errors : Collection

Descripción

La propiedad .errors contiene la colección de todos los errores si se ha generado 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 .method contiene el method pasado en el objeto options al llamar a new(). Si fue omitido, contiene "GET".

.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

Historia
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 solicitud si ha recibido al menos el código de estado, de lo contrario undefined.

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). Undefined 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ámetrosTipoDescripción
No requiere ningún parámetro

Descripción

Esta función es hilo seguro.

La función .terminate() interrumpe la solicitud HTTP. Activa el evento onTerminate.

.terminated

terminated : Boolean

Descripción

La propiedad .terminated contiene True si la solicitud es terminada (después de la llamada a onTerminate), false de lo contrario.

.timeout

timeout : Real

Descripción

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

.url

url : Text

Descripción

La propiedad .url contiene la URL de la solicitud HTTP.

.wait()

.wait( { time : Real } ) : HTTPRequestClass

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.

La función wait() 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.