Página 2 de 2

Utilizar Rest em Harbour

Enviado: 25 Jun 2020 14:09
por hs_paulo
Ainda não consegui.

a API só funciona com GET e retorna vazio.
Quando faço pelo POSTMAN ou SOAPui retorna o conteudo.
Não sei onde está o meu erro.

Utilizar Rest em Harbour

Enviado: 06 Jul 2020 10:54
por Mario Mesquita
Pessoal, bom dia.

Não entro há um tempinho mas vi esse tópico e tenho uma experiência recente que talvez possa contribuir:

Eu usei uma função para a conversão e, aparentemente, ela tem um bug. É a "HB_Base64Encode".

Ela está gerando com CHR(10) e CHR(13) no meio dos dados convertidos e causa falha na autenticação.

Resolvi tirando esses caracteres do resultado final:

Código: Selecionar todos

FUNCTION Cnv64Hash(xHash)
LOCAL xCnv := ""
// convertendo pra base64 - mr, 17/10/19.
//msginfo(xHash)
//msginfo(str(len(xhash),3,0))
xCnv = HB_Base64Encode( xHash, LEN(xHash) )   // converte o conteúdo do arquivo em base64
//msginfo(str(len(xCnv),3,0))
//wCnv := SUBS(xCnv,1,len(xhash))
//msginfo(xCnv)
wCnv := ""
for k = 1 to len(xCnv)
    //msginfo('pos: '+str(k,3,0)+' char: '+subs(xCnv,k,1)+' - asc: '+str(asc(subs(xCnv,k,1)),3,0))
	// tirando os chr(10) e chr(13) da chave //
	xChar := SUBS(xCnv,k,1)
	IF ASC(xChar) # 10 .AND. ASC(xChar) # 13
	   wCnv += xChar
	ENDIF
next

RETURN ALLTRIM(wCnV)
Fazendo isso, funciona certinho. Não reparem as linhas isoladas, rs

Sds,
Mario.

Utilizar Rest em Harbour

Enviado: 06 Jul 2020 11:08
por JoséQuintas
Igual assinatura de XML, que algumas são divididas por blocos, como se fosse pra deixar mais "humanas" visualmente.

Dica pra remover caracteres:

Código: Selecionar todos

cCode := StrTran( cCode, Chr(13) + Chr(10), "" )
Ou remover um de cada vez, se não seguirem esse padrão de estarem juntos

Utilizar Rest em Harbour

Enviado: 06 Jul 2020 11:24
por Mario Mesquita
Valeu, Quintas!

Por isso vc é o mestre, kkkkk Sou todo tosco, já botei no loop...

Abraço,
Mario.

Utilizar Rest em Harbour

Enviado: 06 Jul 2020 13:44
por JoséQuintas
Mario Mesquita escreveu:Por isso vc é o mestre, kkkkk Sou todo tosco, já botei no loop...
Mas sempre tem outras situações pra usar LOOP.
Uma legal é pra procurar caractere inválido ou coisa do tipo.
E tem também o FOR EACH

Código: Selecionar todos

FOR EACH cLetra IN @cTexto DESCEND
   DO CASE
   CASE cLetra $ "0123456789"
   CASE cLetra $ "abcdefgh..."
   CASE cLetra $ "ABCDEFGH..."
   CASE cLetra == "é", cLetra := "e"
   CASE cLetra == Chr(13); cLetra := ""
   CASE cLetra == Chr(10); cLetra := ""
   OTHERWISE
     ? cLetra, Asc( cLetra ), Substr( cTexto, cLetra:__EnumIndex - 10, 20 )
   ENDCASE
NEXT
Detalhe do @ no FOR/EACH, é o que permite atualizar letras em cTexto
O DESCEND, é porque não sei o comportamento se trocar a letra por "", se o FOR/EACH se perde, então vai de trás pra frente.... rs

De um jeito ou de outro, a gente resolve.
E se não existir função praquilo, a gente inventa.

Mas de nada adiantaria conhecer a função, se não soubesse desse detalhe que mencionou sobre assinatura.
No final, todo mundo é mestre, cada um em uma coisa, e assim, todo mundo vai ensinando e aprendendo.

Utilizar Rest em Harbour

Enviado: 07 Jul 2020 11:08
por Mario Mesquita
Bom dia a todos.

Valeu, Quintas. Sempre dando dicas valiosas. Interessante essa do FOR/EACH. Obrigado.

Sds,
Mario.