Bom dia, Estou consumindo uma API de terceiro, ao realizar teste pelo Postman funciona corretamente, ao realizar o mesmo requisição pelo Protheus gera mensagem de erro.
Analisando o Header do Postman ele preenche automaticamente o "Content-Length", simulando no Postman tirando este parâmetro gera o mesmo que ocorre no Protheus.
Abaixo segue trecho do fonte:
oRstCliLog := FWRest():New(cUrlBase)
oRstCliLog:setPath(cPath)
oRstCliLog:SetPostParams(cJsonPos)
aHeadOut := {}
AAdd(aHeadOut, "Content-Type: application/json; charset=UTF-8")
AAdd(aHeadOut, "Accept: application/json")
Aadd(aHeadOut, "Authorization: Bearer 2|KqB3cwgxR4DeiyqmdhplD6FNP5xBpkGxhU58uDcN" )
aAdd(aHeadOut,"Content-Length: " + Alltrim(Str(Len(cJsonPos))) )
Qual a forma correta de informar "Content-Length" no Protheus para que funcione igual ao Postman?
Edson, essa forma que você fez não funcionou? Pois é basicamente isso que fazemos.
— Daniel Mendes 23 de Jan de 2022Daniel, notei o seguinte mesmo forçando o envio do Content-Length, o sistema envia outro valor diferente do calculado no trecho do código repassado.
— Edson Maurcio Gonçalves 24 de Jan de 2022Remova alguns itens do cabeçalho, deixe desse jeito:
oRest := FWRest():New("https://api.chatcorp.com.br/srvc") oRest:setPath("/w/send/text")
aadd(aHeadOut,'User-Agent: Mozilla/4.0 (compatible; Protheus '+GetBuild()+')') aadd(aHeadOut,'Content-Type: aplication\json;charset=UTF-8')
— Diego Andrade 25 de Jan de 2022