Boa noite Giordano,
Realmente o Smartclient HTML tem uma peculiaridade na chamada da função HttpCGet
, pois o cliente passa a ser o seu navegador.
O que você pode fazer, é utilizar a função HttpGet
, que recebe exatamente os mesmos parâmetros, mas quem efetua a requisição é o servidor.
Para que você não precise ficar decidindo qual usar, uma opção seria encapsular ambas em uma função sua, lembrando que quando via JOB, a função HttpCGet
também não pode ser utilizada.
Abaixo um exemplo dessa função:
//-------------------------------------------------------------------
/*/{Protheus.doc} getHTTP
Permite emular um client HTTP - Hypertext Transfer Protocol, através de uma função da linguagem AdvPL,
acessando um determinado documento HTML, publicado em um servidor Web, utilizando o método GET,
permitindo a passagem de parâmetros via URL e aguardando por um tempo determinado (time-out) pela resposta do servidor solicitado.
@param cUrl Indica o endereço HTTP com a pasta e o documento solicitado.
@param cGetParms Indica a lista de strings de parâmetros que serão enviadas ao servidor HTTP,
através da URI. Caso este parâmetro não seja especificado, o mesmo será considerado vazio ("").
@param nTimeOut Indica o tempo, em segundos, máximo de inatividade permitido durante a recepção do documento.
Caso este parâmetro não seja especificado, o valor padrão assumido será de 120 segundos (2 minutos).
@param aHeadStr Indica o array que contêm as strings que serão acrescentadas ao header da requisição que será realizada.
Utilizar "|" (pipes) para separação entre parâmetro e valor.
@param cHeaderGet Indica o retorno, através de referência, da header de resposta HTTP enviada pelo servidor requisitado.
Observação: A variável deve ser declarada antes da chamada da função.
@return cRet Retorna a string que corresponde a requisição solicitada.
@author Daniel Mendes
@since 23/03/2020
@version 1.0
/*/
//-------------------------------------------------------------------
user function getHTTP(cUrl, cGetParms, nTimeOut, aHeadStr, cHeaderGet)
local cRet as char
local nRemote as numeric
nRemote := GetRemoteType()
if nRemote == REMOTE_HTML .Or. nRemote == NO_REMOTE
cRet := HttpGet(cUrl, cGetParms, nTimeOut, aHeadStr, @cHeaderGet)
else
cRet := HttpCGet(cUrl, cGetParms, nTimeOut, aHeadStr, @cHeaderGet)
endif
return cRet
Com isso, basta chamar essa função, e ela vai utilizar e melhor função de GET conforme o clinte da thread, podendo ser chamada em JOB, Client tradicional ou navegador:
U_getHTTP('http://viacep.com.br/ws/02511000/xml/')
Documentações:
https://tdn.totvs.com/display/tec/HTTPGet
https://tdn.totvs.com/display/tec/HTTPCGet