Preciso consumir uma API de terceiros que utiliza URL HTTPS, no postman, funciona normalmente, no Protheus retorna a mensagem "403 Forbidden", alguém tem alguma dica?
/*
oRestClient := FWRest():New("https://apiempresa.com.br/")
cUrlPath := "ics-seguranca/v1/oauth2/tokenGerar"
403 Forbidden
oRestClient := FWRest():New("https://apiempresa.com.br/ics-seguranca/")
cUrlPath := "v1/oauth2/tokenGerar"
403 Forbidden
oRestClient := FWRest():New("https://apiempresa.com.br/ics-seguranca/v1/")
cUrlPath := "oauth2/tokenGerar"
403 Forbidden
*/
oRestClient := FWRest():New("https://apiempresa.com.br/ics-seguranca/v1/oauth2/")
cUrlPath := "tokenGerar"
// 403 Forbidden
// https://apiempresa.com.br/ics-seguranca/v1/oauth2/tokenGerar
jLogin := JSonObject():New()
jLogin["grant_type"] := "password"
jLogin["username"] := ::cCodUser //
jLogin["password"] := ::cCodPasw //
aadd(aHeadOut,'Content-Type: application/json' )
aadd(aHeadOut,'Cache-Control: no-cache')
aadd(aHeadOut,'Authorization: Basic SUNTOnRvdGFs')
cJson := jLogin:ToJson()
oRestClient:setPath(cUrlPost)
oRestClient:SetPostParams(EncodeUTF8(cJson))
If oRestClient:Post(aHeadOut)
cJsonRet := oRestClient:GetResult()
EndIf
cErro := oRestClient:GetLastError()
json := jLogin:ToJson() seria na verdade cjson := jLogin:ToJson() ?
Infelizmente é só um erro de transcrição. Queria que fosse o problema!
O autorization é Basic mesmo? HTTPS normalmente tende a ser utikizado bearer…
É basic mesmo, no postman funciona normal.
Acho que é o seguinte aadd(aHeadOut,‘Authorization: Basic SUNTOnRvdGFs’) esse SUNTOnRvdGFs já é base 64? Se for invés de digitar o base 64, faz com encode64 exemplo → Aadd(aHeadStr, "Authorization: Basic " + Encode64(“protheus:t@t890”))
Alias, é importante passar na url, os mesmos parâmetros que vai nos params, grant_type, no postman ele adiciona automaticamente, no protheus deve adicionar no path também
Exemplo:
Local cUrl := ‘https://apiplataforma.com.br/oauth/token’
Local cPath := ‘?grant_type=password&username=000105&password=hEtr8rASGfdOadalyA27clV8Z14RET’
Mas eu informo o login e senha no corpo, se fosse informar no cabeçalho, eu teria que utilizar o encode64(). Mas vou testar!
Boa tarde! Já tentou usar o HTTPSGET? Eu tive dificuldades também, mas consegui usando o HTTPSGET. Segue breve exemplo abaixo:
cUrl := "https://api.empresa.com/"
cHeadRet := ""
aHeadOut := {}
aadd(aHeadOut,"Content-Type: application/json")
aadd(aHeadOut,"Authorization: Bearer ")
cRetPut := HTTPSGET(cUrl,"","","","",120,aHeadOut,@cHeadRet)
Segue documentação:
https://tdn.totvs.com/display/tec/HTTPSGet
Eu tenho que enviar login e senha, não vi estes parâmetros no metodo get nem no post. Testei agora HTTPSetPass mas retorna “dados de acesso invalidos”.
Fernando, bom dia! O que estás passando no Header do Postman? Tem que passar exatamente as mesmas informações no Header do HTTPSGET.
O header eu entendi como fazer, mas como eu passo o login e senha?
no postman vc usa authorization basic? se sim é o mesmo que transformar em base 64 o usuario e ssenha e passar igual vc já fez aadd(aHeadOut,‘Authorization: Basic SUNTOnRvdGFs’)
Verifica se no Postman está habilitado o followredirects se sim desliga e veja se dá certo, se der errado o endereço tem redirecionamento, descubro o endereço redirecionado e use-o direto no protheus que vai dar certo se o caso for esse.
Desliguei o parâmetro mas mesmo assim funcionou.
uma coisa que vc pode fazeer é usar o wireshark pra ver a diferença entre a request do postman e a request do protheus. se for https não vai rolar isso mas se for http normal dá pra fazer tranquilo.
Quero agradecer a todos que tentaram me ajudar, a maneira que tinha desenvolvido é funcional, eu cometi uma gafe na URL no copia e cola.