PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV 25 → Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok
Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok
Started by Boller, Aug., 12 2022 5:42 PM - No answer
Registered member
3,437 messages
Popularité : +175 (223 votes)
Posted on August, 12 2022 - 5:42 PM
Prezados,

Abaixo segue exemplos de uso da Api Rest Send com Digest Auth exemplos - compartilhe aqui os seus tambem, ok

// Summary: <specify the procedure action>
// Syntax:
// ExecutarRestDigestAuth ()
//
// Parameters:
// None
// Return value:
// None
//
// Example:

// <Specify a usage example>
//
PROCEDURE ExecutarRestDigestAuth()

// Resumo: o procedimento getport info é usado para recuperar informações de status da porta de um gateway DINSTAR-UC2000 gsm que usa autenticação digest.

// autenticação Digest:
// A autenticação Digest é um pouco mais complexa que a Basic porque é feita em duas etapas.
// Na primeira requisição, o servidor envia uma resposta 401 e um cabeçalho WWW-Authenticate com o nonce e os valores que serão utilizados para calcular a resposta a ser dada.
// O cliente retorna uma segunda solicitação com a senha com hash usando o nonce fornecido pelo servidor.

//1ª solicitação

HTTP.IgnoreError = httpIgnoreInvalidCertificate +httpIgnoreExpiredCertificate + httpIgnoreInvalidCertificateName

HTTPRequest ( "https://192.168.10.241/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs" )

retorno is string = HTTPGetResult()

//agora recuperamos algumas informações da 1ª solicitacao

sNonce is a string = ExtractString ( HTTPGetResult ( httpHeader ) , 4 , "," )
sOpaque is a string = ExtractString ( HTTPGetResult ( httpHeader ), 5 , "," )
sCookie is string = HTTPGetResult ( httpCookie )
sRealm is string = "Servidor Web"
sQop is string = " auth "

//( Quality Of Protection) Este parâmetro indica o nível de proteção aplicado .
// Deve corresponder a um dos valores retornados pelo servidor. auth ou auth-int

sNonce = ExtractString ( sNonce, 2 , " ")
sOpaque = ExtractString ( sOpaque, 2 , "" )

//String gerada pelo servidor que o cliente deve retornar como

sHeader is string
sCnonce is string = "RdHlfmls"

//string cliente escolhida arbitrariamente aleatoriamente (pode ser o mesmo o tempo todo)

sNoncecount is string = "00000001"
//(Nonce Count) 8 dígitos hexadecimais representando o número de vezes que o valor do parâmetro "nonce" retornado pelo servidor foi usado pelo cliente. nc=00000001 na primeira vez

resposta is string
//Este parâmetro contém 32 dígitos hexadecimais representando o valor calculado pelo cliente comprovando que ele conhece a senha.

//cálculo da resposta para fornecer

HA1 is string = BufferToHexa(HashString(HA_MD5_128, "admin:Web Server:Password2019"))
HA1 = Lower(StringDelete(HA1," "))
HA2 is string = BufferToHexa(HashString(HA_MD5_128,"GET:/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"))
HA2 = Lower(StringDelete(HA2," "))
resposta = BufferToHexa(HashString(HA_MD5_128,HA1+ ":" + sNonce + ":" + sNoncecount + ":" + sCnonce + ":" + sQop + ":" + HA2))
resposta = Lower(StringDelete(resposta," "))

sHeader = " Digest username= ""admin"" , realm=""%1"", nonce=""%2"", uri=""/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"", algorithm=""MD5"", qop=auth, nc=00000001, cnonce=""RdHlfmls"", response=""%3"", opaque=""%4"" "
sHeader = StringBuild(sHeader,sRealm,sNonce, resposta,sOpaque)

//criação da requisição com as demais informações recuperadas no carteiro
cMyRequest is httpRequest

cMyRequest.. URL = "https://192.168.10.241/api/get_port_info?port=1,2,3&info_type=imei,imsi,iccid,smsc,type,number,reg,slot,callstate,signal,gprs"
cMyRequest..Header [ "Cache-Control" ] = "sem cache"
cMyRequest..Header [ " host " ] = "192.168.10.241"
cMyRequest..Header [ " Accept-Encoding" ] = "gzip, deflate"
cMyRequest..Header [ "Cookie" ] = sCookie
cMyRequest..Header [ "Conexão" ] = "keep-alive"
cMyRequest..Header [ " Authorization" ] = sHeader
cMyRequest..IgnoreError = httpIgnoreInvalidCertificate + httpIgnoreExpiredCertificate + httpIgnoreInvalidCertificateName

cMyResponse is httpResponse = HTTPSend ( cMyRequest )

bufResult is Buffer = cMyResponse.. Content

EDT_Resultado = cMyResponse.. Content


site referencia

https://www.developpez.net/forums/d2026242/environnements-developpement/windev/contribuez/authentification-digest-windev/

https://www.developpez.net/forums/d2026242/environnements-developpement/windev/contribuez/authentification-digest-windev/


Site da Intelbras que usa essa tecnica

https://intelbrascontroledeacesso.docs.apiary.io/…

https://intelbrascontroledeacesso.docs.apiary.io/#reference


Deve ficar assim o httprequest:

Outros exemplos a abaixo

--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/