Tempo aproximado para leitura: 00:03:00 min
Dúvida
E possível identificar um acesso proveniente de um "IP Externo" à rede Local / Sistema Protheus12.1.17, quando utilizado os Métodos: "GET" e/ou "POST" por terceiros?
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) - ADVPL - Até o release 12.1.27
Solução
A função() retorna um array com as informações, enviadas no cabeçalho da requisição, as quais o servidor REST Protheus utiliza. Dentre estas informações, está o endereço IP da requisição, acessível diretamente por HTTPHEADER('__IPCONN__').
Esta somente funciona até 12.1.27 utilizando Rest AdvPL.
A seguir, o exemplo de uma API simples:
#INCLUDE "TOTVS.CH"
#INCLUDE "RESTFUL.CH"
WSRESTFUL TGETSEC DESCRIPTION "Exemplo de serviço REST"
WSMETHOD GET DESCRIPTION "Teste GET" WSSYNTAX "/_TGETSEC || /_TGETSEC/{id}"
END WSRESTFUL
WSMETHOD GET WSSERVICE TGETSEC
Local cIpConn
cIpConn := HTTPHEADER('__IPCONN__')
::SetResponse(EncodeUtf8('Requisição recebida do endereço: ' + cIpConn))
Return .T.
Para conseguir o IP da requisição para o Rest 2.0 deve utilizar o método getClientIp() no objeto oRest.
A seguir exemplo:
#include 'PROTHEUS.CH'
#include 'TOTVS.CH'
#include 'RESTFUL.CH'
#include 'RWMAKE.CH'
#include 'TOPCONN.CH'
#Include "FWMVCDEF.CH"
WSRESTFUL EXECTST DESCRIPTION "TESTE"
WSMETHOD GET DESCRIPTION "TESTE" WSSYNTAX "/EXECTST"
END WSRESTFUL
WSMETHOD GET WSSERVICE EXECTST
local cClientIP as character
cClientIP := oRest:getClientIP()
cResponse := "{'Client IP':" + cClientIP + "}"
oRest:SetResponse(cResponse)
Return
Observação:
oRest:getClientIP
Entendendo as novidades do REST 2.0
1 Comentários