Árvore de páginas

Esta função permite consumir o método GET de uma API Rest a partir da estação de trabalho.

Importante

Esta função depende do WebAgent para ser utilizada via WebApp, pois será executada na estação de trabalho.

Sintaxe

HttpCGet( < cUrl >, [ cGetParms ], [ nTimeOut ], [ aHeadStr ], [ @cHeaderGet ] )

Parâmetros

Nome

Tipo

Descrição

Obrigatório

Referência

cUrl

caractere

Indica o endereço HTTP com a pasta e o documento solicitado.

X


cGetParms

caractere

Indica uma string de parâmetros, do tipo GET, que serão enviados ao servidor HTTP através da URI. Caso não seja especificado, este parâmetro será considerado vazio ("").



nTimeOut

numérico

Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento. Caso não seja especificado, o valor assumido será de 120 segundos.



aHeadStr

vetor

Indica o array que contêm as strings que serão acrescentadas no header da requisição HTTP que será realizada. Utilizar "|" (pipes) para separação entre parâmetro e valor.



cHeaderGet

caractere

Indica a string que conterá o header de resposta HTTP enviado pelo servidor requisitado. Observação: A variável deve ser declarada antes da chamada da função.


X

Retorno

Nome

Tipo

Descrição

cRet

caractere

Retorna a string que corresponde a requisição solicitada.

Observações

Importante: Função disponível em versões iguais ou superiores a 7.00.111010P

  • O parâmetro cGetParms representa um texto que será enviado via "Get". (Exemplo "param1=value1&m2=value2").
  • Caso não seja retornado o documento antes do término do time-out, especificado na chamada da função, ou não seja possível localizar o servidor; seja por falha de resolução de DNS ou por erro de sintaxe ao especificar a URL, a função retornará nulo (NIL).
  • Ao utilizar a função HTTPCGet(), pode-se especificar um Content-Type diferenciado para o conteúdo postado. Caso não seja especificado um Content-Type, alguns servidores tratam a informação postada como sendo um dado do tipo 'application/x-www-form-url', ou seja, seria o equivalente a um formulário HTML postado via browser. Desta forma, outros servidores poderão não reconhecer tal informação postada dessa forma. Para especificar que o conteúdo postado deve ser tratado como um Get de formulário HTTP, deve-se passar no parâmetro um elemento 'Content-Type: application/x-www-form-url'.
  • Mais informações sobre Content-Type, acesse os links a seguir:

Exemplos


1-Consumindo uma API Rest de testes


Neste primeiro exemplo utilizaremos para testes um mini servidor Rest, capaz de responder os métodos GET e POST.

Mini servidor Rest

Pré-Requisitos: Nodejs e NPM

Salve em um diretório de sua escolha os dois arquivos a seguir, o package.json e o index.js

package.json
{
  "name": "sample_rest",
  "version": "1.0.0",
  "description": "simple rest",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "Mansano",
  "license": "MIT",
  "dependencies": {
    "express": "^4.17.3"
  }
}
index.js
var express = require("express");
var bodyParser = require('body-parser')
var app = express()
let port = 3333

// POST - Recebe JSON e retorna o campo "template" deste JSON como resposta
app.post('/postJson', bodyParser.json(), (req, res, next) => {
    console.log("/postJson => " + req.body.template);
    res.json({"post_send":req.body.template});
});

// GET - Recebe e retorna o mesmo JSON
app.get("/getJson", (req, res, next) => {
    console.log("/getJson => " + JSON.stringify(req.query))
    res.json(req.query)
});

app.listen(port, () => {
    console.log(`Server running on port: ${port}`);
});

Neste mesmo diretório abra a linha de comando:

  • Instale as dependencias do mini servidor Rest através do comando:
    • npm install
  • Para iniciá-lo:
    • node index.js
  • Será exibida a mensagem:
    • Server running on port: 3333

Este fonte, na linguagem TLPP,  envia o conteúdo de uma variavel do tipo JSON para o metodo GET de uma API de teste

httpcget.tlpp
#include "protheus.ch"

// Funcao envia o conteudo de uma variavel do tipo JSON
// para o metodo GET de uma API de teste
Function u_HttpCGet()
  Local cUrl := "http://localhost:3333/getJson"
  
  // JSON para testes de envio
  Local oGetPar := {"template":"AQAAABQAAACEAQAAAQASAAMAZAAAAAAAgAEAAH2CDU7keLcCA0aog19vXa0IXbXH4eUkOvWEDD2PBqXwZedxxCkWflZytlYal4QsDC35NggrdNniVZ2aL69I7KOXAkV9WIwC0tAFfDlf7hZeZ2UY/54FkRNF5bxw27e7O3L/xwxENHNOtqF5YH9tI2H2Z*x1buX23HMAbykimzyAcGMsx9Ng/jq1v7lFVXkbiM2RgutC5JwyZC14EhwrviEEsBh67NCWALkGNb*/FG7uJ8Tk/J4ohXtcqN5BoES8aeWHGeWOPLs0GWKjb8Tf8gnOq8r9OHHpyye2qeTv7UjV/sHShe7ey2LhZVVJ9gQfrzr975wlm9mlkTZxSjpWiI9iAa3CWZQORGKKLVPUPhWw6Idyq/sVS5BtVeJgPmRLSh4UYLOQ3Dh4CUnQ9ApbofC6KSdRXVVg8j5CZdyVS56WkBTF*lCa8NW/Y2B1ain*sc2eo/H7IqKvjHmO9Qe37PwVGTSSDId2PDQol7BbYYk2EpsOzC933RDp1vTaOxD1sQ"}

  Local cGetPar   := oGetPar:toJson() // Converte JSON pra texto
  Local nTimeOut  := 2 // Segundos
  Local aHeaderStr:= {}
  Local cHeaderRet:= ""
  Local cResponse := ""
  Local cErro     := ""
  Local cMsgAlert := "HttpCGet()"
  
  aAdd(aHeaderStr,"Content-Type| application/json")
  aAdd(aHeaderStr,"Content-Length| " + Alltrim(Str(Len(cGetPar))) )

  cResponse := HttpCGet( cUrl , cGetPar , nTimeOut , aHeaderStr , @cHeaderRet )
  cMsgAlert += VarInfo("Header:", cHeaderRet )
  cMsgAlert += VarInfo("Retorno:", cResponse )
  cMsgAlert += VarInfo("Erro:", HTTPGetStatus(cErro) )
  cMsgAlert += VarInfo("Erro:", cErro )
  MsgAlert(cMsgAlert)
Return

Fonte sendo executado via WebApp com o WebAgent ativo.

2-Consumindo uma API externa


Neste segundo exemplo será consumido uma API enviando o Content-Type text/xml.

Exemplo 2
#INCLUDE "TOTVS.CH"
User Function tstCGet()
  Local cUrl      := "endereço do get"
  Local cGetPar := "String com parâmetros a ser enviado na URL"
  Local nTimeOut := 2 //Segundos
  Local aHeaderStr:= {}
  Local cHeaderRet:= ""
  Local cResponse  := ""
  Local cErro    := ""
  aAdd(aHeaderStr,"Content-Type| text/xml; charset=utf-8" )
  aAdd(aHeaderStr,"Content-Length| " + Alltrim(Str(Len(cGetPar))) )
  cResponse := HttpCGet( cUrl , cGetPar , nTimeOut , aHeaderStr , @cHeaderRet )
  VarInfo("Header:", cHeaderRet)
  VarInfo("Conteudo:" ,cResponse) 
  VarInfo("Erro:", HTTPGetStatus(cErro) )
  VarInfo("Erro:", cErro )
Return

Veja também

  • Sem rótulos