Saltar para o conteúdo principal
Versão: Próximo

HTTP Request

HTTP Request ( metodoHTTP ; url ; conteúdo ; resultado {; nomCab ; valCab}{; *} ) -> Resultado

ParâmetroTipoDescrição
metodoHTTPTexto🡒Método HTTP para a solicitação
urlTexto🡒URL à qual enviar a solicitação
conteúdoTexto, BLOB, Imagem, Objeto🡒Conteúdo do corpo(body)da solicitação
resultadoTexto, BLOB, Imagem, Objeto🡘Resultado da solicitação
nomCabArray texto🡒Nomes dos cabeçalhos da solicitação
🡘Nomes dos cabeçalhos devolvidos
valCabArray texto🡒Valores dos cabeçalhos da solicitação
🡘Valores dos cabeçalhos devolvidos
*Operador🡒Se passada, a conexão se mantém (keep-alive)Se omitida, a conexão é fechada automaticamente.
ResultadoInteiro longo🡐Código de estado HTTP

O comando HTTP Request permite enviar todo tipo de petição HTTP a um URL específico e processar a resposta do servidor HTTP.

Passe no parâmetro metodoHTTP o método HTTP da petição. Pode utilizar uma das seguintes constantes, do tema HTTP Client:

ConstanteTipoValorComentário
HTTP DELETE methodCadeiaDELETEVer o RFC 2616
HTTP GET methodCadeiaGETVer o RFC 2616. Equivale a utilizar o comando HTTP Get
HTTP HEAD methodCadeiaHEADVer o RFC 2616
HTTP OPTIONS methodCadeiaOPTIONSVer o RFC 2616
HTTP POST methodCadeiaPOSTVer o RFC 2616
HTTP PUT methodCadeiaPUTVer o RFC 2616
HTTP TRACE methodCadeiaTRACEVer o RFC 2616

Passe no parâmetro url ou URL onde queira enviar a solicitação. A sintaxes a utilizar é:

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

Por exemplo, você pode passar as seguintes cadeias:

    http://www.myserver.com    http://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 (**)

(*) Durante as solicitações HTTPS, a autoridade do certificado não se verifica.
(**) Para saber mais sobre endereços IPv6 em urls, veja RFC 2732.

Passe no parâmetro conteúdo o corpo (body) da petição. Os dados passados neste parâmetro dependem do método HTTP da solicitação.
Pode enviar dados de tipo texto, BLOB, imagem ou objeto. Quando o content-type não é especificado, é utilizado os seguintes tipos:

  • para os textos: texto/plano - UTF8
  • para os BLOBs: aplicação/byte-stream
  • para as imagens: tipo MIME conhecido (best for Web).
  • para os objetos C_OBJECT: aplicação/json

Depois da execução do comando, o parâmetro resposta recupera o resultado do pedido devolvido pelo servidor. Este resultado corresponde ao corpo (body) da resposta, sem os cabeçalhos (headers). Pode passar variáveis de diferentes tipos em resposta:

  • Texto: quando o resultado se espera em forma de texto codificado em UTF16 ou em forma de referencia árvore XML.
  • BLOB: quando o resultado se espera em forma binária.
  • Imagem: quando o resultado se espera em forma de imagem.
  • Objeto C_OBJECT: quando o resultado esperado é um objeto.

Nota: quando se passa uma variável de texto em resposta, 4D tentará decodificar os dados devolvidos desde o servidor. 4D primeiro tenta recuperar o conjunto de caracteres do cabeçalho de tipo de conteúdo, depois do conteúdo utilizando um BOM e, finalmente, busca qualquer atributo http-equiv charset (em conteúdo html) ou codificação (para xml). Se não puder detectar nenhum charset, 4D tentará decodificar a resposta em ANSI. Se a conversão falhar, o texto resultante ficará vazio. Se não tiver certeza se o servidor devolve uma informação charset ou BOM, mas conhece a codificação, é preciso passar resposta em BLOB e chamar ao Convert to text.

Se passar uma variável de tipo objeto no parâmetro resposta, se a petição devolver um resultado com o conteúdo tipo "aplicação/json" (ou "algo/json"), 4D tenta analisar o conteúdo JSON para gerar o objeto. Senão um objeto 4DBlob é retornado.

Se o resultado retornado pelo servidor não corresponder ao tipo de variável de respsota, será deixado em branco.

Em nomCab e valoresCab passe os arrays que contém os nomes e os valores dos cabeçalhos da solicitação.

Depois da execução do método, estes arrays contém os nomes e os valores dos cabeçalhos devolvidos pelo servidor HTTP. Especificamente, este principio lhe permite administrar seus cookies.

O parâmetro * permite ativar o mecanismo keep-alive para a conexão ao servidor. Por padrão, este parâmetro se omite, keep-alive não está ativo.

O comando devolve o código do estado HTTP padrão (200=OK...) tal qual foi devolvido pelo servidor. A lista de códigos de estado HTTP está no RFC 2616.
Caso a conexão ao servido não seja possível por uma razão relacionada com a rede (DNS Failed, Server not reachable...), o comando devolve 0 e é gerado um erro.Você pode interceptá-lo usando um método instalado pelo comando ON ERR CALL.

Exemplo 1

Eliminação de um registro em uma base remota:

 var $response : Text
 $body_t:="{record_id:25}"
 $httpStatus_l:=HTTP Request(HTTP DELETE method;"database.example.com";$body_t;$response)

Nota: Você deve processar a solicitação da maneira apropriada no servidor remoto, HTTP Request somente se encarrega da petição e do resultado devolvido.

Exemplo 2

Adicionar um registro a uma base remota:

 var $response : Text
 $body_t:="{fName:'john',fName:'Doe'}"
 $httpStatus_l:=HTTP Request(HTTP PUT method;"database.example.com";$body_t;$response)

Nota: Você deve processar a solicitação da maneira apropriada no servidor remoto, HTTP Request somente se encarrega da petição e do resultado devolvido.

Exemplo 3

Petição para adicionar um registro em JSON a um banco de dados remoto:

 var $content : Object
 OB SET($content;"lastname";"Doe";"firstname";"John")
 $result:=HTTP Request(HTTP PUT method;"database.example.com";$content;$response)

Ver também

HTTP Get