Tempo aproximado para leitura: 00:01:00 min
Ocorrência
Ao efetuar o consumo de um serviço REST utilizando a classe FwRest(), eu tenho sucesso, porém ao efetuar a segunda requisição, é exibido o erro abaixo quando utilizado o método GetLastError():
HOST NOT FOUND
Ambiente
Cross Segmento - TOTVS Backoffice (Linha Protheus) – ADVPL – A partir da versão 12.1.17
Causa
Este erro ocorre porque na primeira requisição é enviado implicitamente um (ou mais) cookie(s), no cabeçalho da requisição por meio do MIME type Set-Cookie.
Esta informação fica evidente quando efetuamos a requisição via ferramentas externas (ex: Postman), contudo na segunda requisição, o cookie não é enviado, porém é utilizado:
IMG01: Cookies enviados (Primeira requisição)
IMG02: Mime type set - cookie (Primeira requisição)
IMG03: Cookies utilizados na aba cookies, porém não enviados (Segunda requisição)
Solução
Na segunda requisição para a mesma URI (Uniform Resource Identifier), realizar a adição dos cookies no vetor do cabeçalho que será enviado no método Post():
/** PRIMEIRA REQUISIÇÃO JÁ REALIZADA **/
// INFORMA O RECURSO E ENVIA O JSON NO CORPO DA REQUISIÇÃO
oRest:SetPath(cPath)
oRest:SetPostParams(oJson:ToJson())
// REALIZA O ENVIO DO USUÁRIO E SENHA NO CABEÇALHO
AAdd(aHeader, aSession[1][1] ": "+ aSession[1][2])
AAdd(aHeader, aSession[2][1] ": "+ aSession[2][2])
// ENVIA O COOKIE QUE JÁ FOI MONTADO CONFIGURADO NA REQUISIÇÃO ANTERIOR
If (Len(oRest:oResponseH:aHeaderFields) > 0)
AAdd(aHeader, "Cookie: " + oRest:oResponseH:aHeaderFields[AScan(oRest:oResponseH:aHeaderFields, {|x| Upper(AllTrim(x[1])) == "SET-COOKIE"})][2])
// REALIZA O ENVIO PELO VERBO HTTP POST
If (oRest:Post(aHeader)) // SE SUCESSO, GERA OBJETO JSON COM A RESPOSTA
oJson:FromJson(oRest:GetResult())
Else // SE ERRO, EXIBE A MENSAGEM NO CONSOLE DO SERVIDOR
ConOut(Repl("-", 80))
ConOut(PadC("Couldn't generate the application token", 80))
ConOut(Repl("-", 80))
EndIf
EndIf
/** DEMAIS PROCESSO PÓS REQUISIÇÃO **/
Saiba mais
Mdn - Cookies HTTP
FWRest
0 Comentários