HTTPRequest
The HTTPRequest
class allows you to handle HTTPRequest objects
that can be used to configure and send requests to an HTTP server, as well as to process the HTTP server responses.
A classe HTTPRequest
está disponível no class store 4D
. You create and send HTTP requests using the 4D.HTTPRequest.new() function, that returns a HTTPRequest object
.
História
Release | Mudanças |
---|---|
19 R6 | Classe adicionada |
Exemplo
Criar uma classe MyHttpRequestOptions
para as opções de pedido:
Class constructor($method : Text; $headers : Object; $body : Text)
This.method:=$method This.headers:=$headers This.body:=$body Function onResponse($request : 4D.HTTPRequest; $event : Object)
//Método My onResponse, se quiser manejar a petição de forma assincronica Function onError($request : 4D.HTTPRequest; $event : Object)
//Método My onError, se quiser manejar a petição de forma assincrônica
Pode agora criar o seu pedido:
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() //If you want to handle the request synchronously
//Now pode usar $request.response para aceder ao resultado do pedido ou $request.error para verificar o erro que aconteceu.
Objeto HTTPRequest
Um objecto HTTPRequest é um objecto não partilhável.
Os objectos HTTPRequest fornecem as seguintes propriedades e funções:
agent : 4D.HTTPAgent the agent object passed in options or the global agent object if it was omitted |
dataType : Text the dataType passed in the options object when calling new(), "auto" if it was omitted |
encoding : Text the encoding passed in the options object when calling new(), "UTF-8" if it was omitted |
errors : Collection the collection of all the errors if at least one error has been triggered |
headers : Object the headers passed in the options object when calling new() |
method : Text the method passed in the options object when calling new() |
protocol : Text the protocol passed in the options object when calling new() |
response : Object the response to the request if it has received at least the status code, undefined otherwise |
returnResponseBody : Boolean the returnResponseBody passed in the options object when calling new() |
.terminate() aborts the HTTP request |
terminated : Boolean True if the request is terminated (after the call to onTerminate ), false otherwise |
timeout : Real the timeout passed in the options object when calling new() |
url : Text the URL of the HTTP request |
.wait( { time : Real } ) : 4D.HTTPRequest waits for the response from the server |
4D.HTTPRequest.new()
História
Release | Mudanças |
---|---|
20 | Validação TLS por padrão |
18 R6 | Suporte às propriedades automaticRedirections e decodeData |
4D.HTTPRequest.new( url : Text { ; options : Object } ) : 4D.HTTPRequest
Parâmetro | Tipo | Descrição | |
---|---|---|---|
url | Text | -> | URL para onde enviar o pedido |
options | Object | -> | Pedir propriedades de configuração |
Resultados | 4D.HTTPRequest | <- | Novo objecto HTTPRequest |
Descrição
The 4D.HTTPRequest.new()
function creates and sends a HTTP request to the HTTP server defined in url with the defined options, and returns a 4D.HTTPRequest
object.
The returned HTTPRequest
object is used to process responses from the HTTP server and call methods.
In url, pass the URL where you want to send the request. A sintaxe a utilizar é:
{http://}[{user}:[{password}]@]host[:{port}][/{path}][?{queryString}]
{https://}[{user}:[{password}]@]host[:{port}][/{path}][?{queryString}]
Se você omitir a parte do esquema (http://
ou https://
), é enviado um pedido https.
Por exemplo, pode passar as seguintes cordas:
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 (**)
options
parameter
In the options parameter, pass an object that can contain the following properties:
Propriedade | Tipo | Descrição | Por padrão |
---|---|---|---|
agent | 4D.HTTPAgent | HTTPAgent para usar para o HTTPRequest. Agent options will be merged with request options (request options take precedence). If no specific agent is defined, a global agent with default values is used. | Global agent object |
automaticRedirections | Parâmetros | Se true, os redirecionamentos serão realizados automaticamente (até 5 redirecionamentos são tratados, a resposta do 6. º redirecionamento é retornada, se houver) | True |
body | Diferente de | Corpo do pedido (requerido no caso de post ou put requests). Pode ser um texto, um blob, ou um objecto. O tipo de conteúdo é determinado a partir do tipo desta propriedade, a menos que seja colocado dentro dos cabeçalhos | indefinido |
certificatesFolder | Folder | Define a pasta de certificados de cliente activos | indefinido |
dataType | Text | Tipo de atributo do corpo de resposta. Valores: "texto", "blob", "objecto", ou "auto". Se "auto", o tipo do conteúdo do corpo será deduzido do seu tipo MIME (objecto para JSON, texto para texto, javascript, xml, mensagem http e forma codificada url, ou então um blob) | "auto" |
decodeData | Parâmetros | Se for verdade, os dados recebidos em onData callback não são compactados | False |
encoding | Text | Used only in case of requests with a body (post or put methods). Codificação do conteúdo do corpo do pedido se for um texto, ignorado se o tipo de conteúdo for colocado dentro dos cabeçalhos | "UTF-8" |
headers | Object | Cabeçalhos do pedido. Syntax: headers.key=value (value can be a Collection if the same key must appear multiple times) | Objecto vazio |
method | Text | "POST", "GET", ou outro método | "GET" |
minTLSVersion | Text | Sets the minimum version of TLS: "TLSv1_0 ", "TLSv1_1 ", "TLSv1_2 ", "TLSv1_3 " | "TLSv1_2 " |
onData | Function | Chamada de retorno quando os dados do corpo são recebidos. Recebe dois objectos como parâmetros (ver abaixo) | indefinido |
onError | Function | Chamada de retorno quando ocorre um erro. Recebe dois objectos como parâmetros (ver abaixo) | indefinido |
onHeaders | Function | Chamada de retorno quando os cabeçalhos são recebidos. Recebe dois objectos como parâmetros (ver abaixo) | indefinido |
onResponse | Function | Chamada de retorno quando uma resposta é recebida. Recebe dois objectos como parâmetros (ver abaixo) | indefinido |
onTerminate | Function | Chamada de retorno quando o pedido estiver terminado. Recebe dois objectos como parâmetros (ver abaixo) | indefinido |
protocol | Text | "auto" ou "HTTP1". "auto" significa HTTP1 na implementação actual | "auto" |
proxyAuthentication | objeto de autenticação | Autenticação por procuração de tratamento de objectos | indefinido |
serverAuthentication | objeto de autenticação | Autenticação do servidor de tratamento de objectos | indefinido |
returnResponseBody | Parâmetros | Se false, o corpo de resposta não é retornado no objeto response . Devolve um erro se falso e onData é indefinido | True |
timeout | Real | Tempo de espera em segundos. Indefinido = sem timeout | Indefinido |
validateTLSCertificate | Parâmetros | Se false, 4D não valida o certificado TLS e não retorna um erro se ele for inválido (i.e. expirado, auto-assinado...). Importante: Na implementação actual, a Autoridade de Certificação em si não é verificada. | True |
Funções Callback
Todas as funções de chamada de retorno recebem dois parâmetros de objectos:
Parâmetro | Tipo |
---|---|
$param1 | Objeto HTTPRequest |
$param2 | Objeto Event |
Aqui está a sequência de chamadas de retorno:
-
onHeaders
é sempre chamado uma vez -
onData
is called zero or several times (not called if the request does not have a body) -
Se não ocorreu nenhum erro,
onResponse
é sempre chamado uma vez -
Se ocorrer um erro,
onError
é executado uma vez (e encerra o pedido) -
onTerminate
é sempre executado uma vez
For the callback functions to be called when you do not use wait()
(asynchronous call), the process must be a worker created with CALL WORKER
, NOT New process
.
objecto evento
Um objeto event
é retornado quando uma função de retorno de chamada é chamada. Contém as seguintes propriedades:
Propriedade | Tipo | Descrição |
---|---|---|
.data | blob | Dados recebidos. É sempre undefined excepto no callback onData |
.type | text | Tipo de evento. Possíveis valores: "resposta", "erro", "cabeçalhos", "dados", ou "terminar |
authentication-object
An authentication object handles the options.serverAuthentication
or options.proxyAuthentication
property. Pode conter as seguintes propriedades:
Propriedade | Tipo | Descrição | Por padrão |
---|---|---|---|
name | Text | Nome utilizado para autenticação | indefinido |
senha | Text | Senha utilizada para autenticação | indefinido |
method | Text | Método utilizado para autenticação: "basic", "digest", "auto". | "auto" |
HTTP Parse message
História
Release | Mudanças |
---|---|
20 R4 | Adicionado |
HTTP Parse message( data : Text ) : Object
HTTP Parse message( data : Blob ) : Object
Parâmetro | Tipo | Descrição | |
---|---|---|---|
data | Text, Blob | -> | Dados a serem analisados |
Resultados | Object | <- | Objeto, cada propriedade é uma parte dos dados de várias partes |
Descrição
The HTTP Parse message
command parses a multipart/form-data text or blob (HTTP "response" message) and extracts the content to an object. Each property of the returned object corresponds to a part of the multipart data.
HTTP em si, é um protocolo de comunicação sem estado. Neste quadro, os clientes iniciam uma comunicação enviando mensagens "request" aos servidores, especificando detalhes como método, alvo, cabeçalhos, conteúdo, etc. Os servidores, respondem com mensagens de "resposta" que incluem os mesmos detalhes. HTTP Parse message
parses either the "request" or the "response" message into a well-organized object.
Exemplo
No exemplo a seguir, analisamos os dados de um arquivo de texto que contém solicitações HTTP.
Aqui está o conteúdo do arquivo:
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 analisar o arquivo:
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
Descrição
The .agent
property contains the agent
object passed in options
or the global agent object if it was omitted.
.dataType
dataType : Text
Descrição
The .dataType
property contains the dataType
passed in the options
object when calling new(), "auto" if it was omitted.
.encoding
encoding : Text
Descrição
The .encoding
property contains the encoding
passed in the options
object when calling new(), "UTF-8" if it was omitted.
.errors
errors : Collection
Descrição
The .errors
property contains the collection of all the errors if at least one error has been triggered.
Aqui está o conteúdo da propriedade .errors
:
Propriedade | Tipo | Descrição | |
---|---|---|---|
errors | Collection | pilha de erros 4D em caso de erro | |
[].errCode | Number | Código de erro 4D | |
[].message | Text | Descrição do erro 4D | |
[].componentSignature | Text | Assinatura da componente interna que devolveu o erro |
.headers
headers : Object
Descrição
The .headers
property contains the headers
passed in the options
object when calling new(). Se foi omitido, contém um objecto vazio.
.method
method : Text
Descrição
The .method
property contains the method
passed in the options
object when calling new(). Se foi omitido, contém "GET".
.protocol
protocol : Text
Descrição
The .protocol
property contains the protocol
passed in the options
object when calling new(). Se foi omitido ou se "auto" foi utilizado, contém a versão do protocolo utilizado.
.response
História
Release | Mudanças |
---|---|
19 R8 | .headers devolve nomes em minúsculas. Nova propriedade .rawHeaders |
response : Object
Descrição
The .response
property contains the response to the request if it has received at least the status code, undefined otherwise.
Um objeto response
é um objeto não compartilhável. Contém as seguintes propriedades:
Propriedade | Tipo | Descrição |
---|---|---|
.body | Diferente de | Corpo da resposta. O tipo da mensagem é definido conforme a propriedade dataType . Indefinido se o corpo ainda não tiver sido recebido |
.headers | Object | Cabeçalhos da resposta. Os nomes dos cabeçalhos são devolvidos em minúsculas. <headername>.key = value (value can be a collection if the same key appears multiple times). Indefinido se os cabeçalhos ainda não tiverem sido recebidos. |
.status | Number | Código de estado da resposta |
.statusText | Text | Mensagem que explica o código de estado |
.rawHeaders | Object | Cabeçalhos da resposta. Os nomes dos cabeçalhos são devolvidos intactos (com o seu caso original). <headerName>.key = value (value can be a collection if the same key appears multiple times). Indefinido se os cabeçalhos ainda não tiverem sido recebidos. |
.returnResponseBody
returnResponseBody : Boolean
Descrição
The .returnResponseBody
property contains the returnResponseBody
passed in the options
object when calling new(). Se foi omitido, contém True.
.terminate()
.terminate()
Parâmetro | Tipo | Descrição | |
---|---|---|---|
Não exige nenhum parâmetro |
Descrição
Esta função é thread segura.
The .terminate()
function aborts the HTTP request. Desencadeia o evento onTerminate
.
.terminated
terminated : Boolean
Descrição
The .terminated
property contains True if the request is terminated (after the call to onTerminate
), false otherwise.
.timeout
timeout : Real
Descrição
The .timeout
property contains the timeout
passed in the options
object when calling new(). Se foi omitido, contém Indefinido.
.url
url : Text
Descrição
The .url
property contains the URL of the HTTP request.
.wait()
.wait( { time : Real } ) : 4D.HTTPRequest
Parâmetro | Tipo | Descrição | |
---|---|---|---|
time | Real | -> | Tempo máximo em segundos para esperar pela resposta |
Resultados | 4D.HTTPRequest | <- | HTTPRequest object |
Descrição
Esta função é thread segura.
The wait()
function waits for the response from the server.
If a time parameter is passed, the function will wait at most the defined number of seconds.
Se a resposta do servidor já tiver chegado, a função regressa imediatamente.
During a .wait()
execution, callback functions are executed, whether from other HTTPRequest
or SystemWorker
instances, or other CALL WORKER
calls. Você pode sair de um .wait()
chamando terminate()
de um retorno de chamada.