Saltar al contenido principal
Versión: v20 R4 BETA

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
VersiónModificaciones
v19 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
VersiónModificaciones
v20Validación TLS por defecto
v19 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"

HTTP Parse message

Histórico
VersiónModificaciones
v20 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 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 bien organizado.

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"
//}

.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
VersiónModificaciones
v19 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ámetrosTipoDescripció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.