HTTPRequest
A classe HTTPRequest
permite que você lide com objetos HTTPRequest
que pode ser usado para configurar e enviar solicitações a um servidor HTTP, além de processar as respostas do servidor HTTP.
A classe HTTPRequest
está disponível no class store 4D
. Você cria e envia solicitações HTTP usando a função 4D.HTTPRequest.new() que retorna uma 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 o objeto agent passado em options ou o objeto agente global se ele foi omitido |
dataType : Text o dataType passado no objeto options ao chamar new(), "auto" se foi omitido |
encoding : Text o encoding passado no objeto options ao chamar new(), "UTF-8" se ele foi omisso |
errors : Collection a coleção de todos os erros se pelo menos um erro tiver sido acionado |
headers : Object o headers passado no objeto options ao chamar new() |
method : Text o método passado no objeto options ao chamar new() |
protocol : Text o protocolo passado no objeto options ao chamar new() |
response : Object a resposta à solicitação se ela tiver recebido pelo menos o código de estado, indefinido caso contrário |
returnResponseBody : Boolean o returnResponseBody passado em o objeto options ao chamar new() |
.terminate() aborta a solicitação HTTP |
terminated : Boolean True se a solicitação for encerrada (após a chamada para onTerminate ), false caso contrário |
timeout : Real o timeout passado no objeto options ao chamar new() |
url : Text a URL da solicitação HTTP |
.wait( { timeout : Real } ) : 4D.HTTPRequest espera por uma resposta do servidor ou até o timeout especificado ser alcançado |
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
A função 4D.HTTPRequest.new()
cria e envia uma solicitação HTTP para o servidor HTTP definido na url com as opções definidas e retorna um objeto 4D.HTTPRequest
.
O objeto devolvido HTTPRequest
é utilizado para processar respostas do servidor HTTP e métodos de chamada.
Em url, passe o URL para onde pretende enviar o pedido. 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
No parâmetro options, passe um objeto que possa conter as seguintes propriedades:
Propriedade | Tipo | Descrição | Por padrão |
---|---|---|---|
agent | 4D.HTTPAgent | HTTPAgent para usar para o HTTPRequest. As opções do agente serão mescladas com as opções de solicitação (as opções de solicitação têm precedência). Se nenhum agente específico for definido, será usado um agente global com valores padrão. | Objeto agente global |
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 | Utilizado apenas em caso de pedidos com um body (métodos post or put ). 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. Sintaxe: headers.key=value (value pode ser uma coleção se a mesma chave precisar aparecer várias vezes) | Objecto vazio |
method | Text | "POST", "GET", ou outro método | "GET" |
minTLSVersion | Text | Define a versão mínima do 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
é chamado zero ou várias vezes (não chamado se o pedido não tiver um corpo) -
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
Para as funções de callback serem chamadas quando você não usa wait()
(chamada assíncrona), o processo deve ser um worker criado com CALL WORKER
, NÃO 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
Um objeto de autenticação manipula a propriedade options.serverAuthentication
ou options.proxyAuthentication
. 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" |
.agent
agent : 4D.HTTPAgent
Descrição
A propriedade .agent
contém o objeto agent
passado em options
ou o objeto agente global se ele foi omitido.
.dataType
dataType : Text
Descrição
A propriedade .dataType
contém o dataType
passado no objeto options
ao chamar new(), "auto" se foi omitido.
.encoding
encoding : Text
Descrição
A propriedade .encoding
contém o encoding
passado no objeto options
ao chamar new(), "UTF-8" se ele foi omisso.
.errors
errors : Collection
Descrição
A propriedade .errors
contém a coleção de todos os erros se pelo menos um erro tiver sido acionado.
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
A propriedade .headers
contém o headers
passado no objeto options
ao chamar new(). Se foi omitido, contém um objecto vazio.
.method
method : Text
Descrição
A propriedade .method
contém o método
passado no objeto options
ao chamar new(). Se foi omitido, contém "GET".
.protocol
protocol : Text
Descrição
A propriedade .protocol
contém o protocolo
passado no objeto options
ao chamar 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
A propriedade .response
contém a resposta à solicitação se ela tiver recebido pelo menos o código de estado, indefinido caso contrário.
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 = valor (valor pode ser uma coleção se a mesma chave aparecer várias vezes). 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 = valor (valor pode ser uma coleção se a mesma chave aparecer várias vezes). Indefinido se os cabeçalhos ainda não tiverem sido recebidos. |
.returnResponseBody
returnResponseBody : Boolean
Descrição
A propriedade .returnResponseBody
contém o returnResponseBody
passado em o objeto options
ao chamar 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.
A função .terminate()
aborta a solicitação HTTP . Desencadeia o evento onTerminate
.
.terminated
terminated : Boolean
Descrição
A propriedade .terminated
contém True se a solicitação for encerrada (após a chamada para onTerminate
), false caso contrário.
.timeout
timeout : Real
Descrição
A propriedade .timeout
contém o timeout
passado no objeto options
ao chamar new(). Se foi omitido, contém Indefinido.
.url
url : Text
Descrição
A propriedade .url
contém a URL da solicitação HTTP .
.wait()
.wait( { timeout : Real } ) : 4D.HTTPRequest
Parâmetro | Tipo | Descrição | |
---|---|---|---|
timeout | Real | -> | Tempo máximo de espera em segundos |
Resultados | 4D.HTTPRequest | <- | HTTPRequest object |
Descrição
Esta função é thread segura.
A função wait()
espera por uma resposta do servidor ou até o timeout
especificado ser alcançado.
Se for fornecido um timeout, a função aguardará a duração especificada nesse parâmetro. Aceitam-se números decimais.
Se a resposta do servidor já tiver chegado, a função regressa imediatamente.
Durante a execução de .wait(), as funções de callback dos workers são executadas, sejam elas originadas de outras instâncias de HTTPRequest
ou SystemWorker
, ou de outras chamadas CALL WORKER
. Você pode sair de uma .wait() chamando terminate()
de um retorno de chamada.