Ir para conteúdo
  • Cadastre-se

dev botao

Authorization Basic HTTRIO SPC


Ver Solução Respondido por João Paulo Müller,
  • Este tópico foi criado há 2348 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Postado (editado)

Bom dia a todos,

Gostaria de saber se alguém poderia me ajudar na seguinte situação:

estou fazendo uma integração com o web service do SPC/CDL, o qual necessita uma autenticação do tipo basic (header do HTTP).

Preciso fazer essa autenticação utilizando o HTTRIO pois usei o Importer WSDL, não construi o XML na "unha", digamos assim.

Consegui realizar a autenticação no evento beforePost conforme exemplo abaixo:

  auth := 'Authorization: Basic ' + EncodeString('login:senha');
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);

o problema é o seguinte, a primeira vez que executo a aplicação e consumo o web service, funciona perfeitamente, faz a autenticação e me da um retorno, tudo ok.

Porém, sem fechar a aplicação se realizar mais uma consulta, retorna o erro de autenticação (Erro Autenticação WS).

Se fechar a aplicação e abrir novamente a primeira consulta funciona.

Alguém poderia ajudar? 

Segue fonte de um projeto que fiz aqui para teste:

procedure TForm3.BitBtn1Click(Sender: TObject);
var C:ConsultaSpcScWSService;
    F:filtroConsultaSpcPlusMasterProtestoSCWS2;
    R:RespostaConsultaSpcPlusMasterProtestoSC2;
    H:THTTPRIO;
begin
  H := THTTPRIO.Create(self);
  H.HTTPWebNode.OnBeforePost := HTTPRIO1HTTPWebNode1BeforePost;
  try 
    C := GetConsultaSpcScWSService(false,'',H);
    F := filtroConsultaSpcPlusMasterProtestoSCWS2.Create;
    try
      F.cpfCnpj := 'xxxx';
      R := C.SPCPlusMasterProtestoSC_65(f);
      Memo1.Text :=  R.consumidor.nome;
      R.free;
    finally
      C := nil;
      F.free;     
    end;
  except on E:exception do
    Memo1.Text := 'Erro :'+E.Message;
  end;
end;

procedure TForm3.HTTPRIO1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var auth:string;
begin
  auth := 'Authorization: Basic ' + EncodeString('user:pass');
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
end;

Grato desde já.

Editado por João Paulo Müller
  • Curtir 1
  • Solution
Postado

Problema resolvido. Depois de muitos testes descobri que o problema era no armazenamento dos cookies. Para solucionar o problema simplesmente limpo os cookies antes da autenticação no evento OnBeforePost do HTTPReqResp:

procedure TConsulta.HTTPRIO1HTTPWebNode1BeforePost(
  const HTTPReqResp: THTTPReqResp; Data: Pointer);
var
  auth:string;
  S:string;
begin
  {Clear Cookies}
  InternetSetOption(0, INTERNET_OPTION_END_BROWSER_SESSION, nil, 0);

  {autenticação, (Monta base64 e seta no Header HTTP)}
  auth := 'Authorization: Basic ' + EncodeString(GEntidade+':'+GUser + ':'+ GPassWord);
  HttpAddRequestHeaders(Data, PChar(auth), Length(auth), HTTP_ADDREQ_FLAG_ADD);
end;

Talvez ajude alguém também.

  • Curtir 2
  • 1 mês depois ...
Postado
Em 03/01/2017 at 08:28, João Paulo Müller disse:

Ambos vem da API do windows.

Uses: Winapi.WinInet

Show João Paulo. 

Funcionou perfeitamente pra mim também.

  • 10 meses depois ...
  • 2 meses depois ...
  • 2 meses depois ...
Postado

Estou passando por dificuldades, não tenho experiência com webservice e esse do SPC está me dando dor de cabeça.
Tentei fazer usando como exemplo o  código postado acima, mas não tem jeito de comunicar, sempre que tento retorna:
"Erro :Erro Autenticação WS"

Talvez para muitos seja óbvio, mas infelizmente não para mim

Desde já agradeço a atenção.

 

Postado

Bom dia Jefferson, você esta conseguindo autenticar a primeira vez? Esse erro acontece somente na segunda vez que você consulta ou já acontece na primeira?

Se já acontece na primeira vez, verifique se os dados que você está utilizando para autenticar estão corretos, no caso, a entidade e a senha.

Postado
35 minutos atrás, João Paulo Müller disse:

Bom dia Jefferson, você esta conseguindo autenticar a primeira vez? Esse erro acontece somente na segunda vez que você consulta ou já acontece na primeira?

Se já acontece na primeira vez, verifique se os dados que você está utilizando para autenticar estão corretos, no caso, a entidade e a senha.

 

35 minutos atrás, João Paulo Müller disse:

Bom dia Jefferson, você esta conseguindo autenticar a primeira vez? Esse erro acontece somente na segunda vez que você consulta ou já acontece na primeira?

Se já acontece na primeira vez, verifique se os dados que você está utilizando para autenticar estão corretos, no caso, a entidade e a senha.

 

Não estou conseguindo nem a primeira vez. seguindo o seu modelo de imediato vem "Erro de autenticação WS"

  • 1 mês depois ...
  • Este tópico foi criado há 2348 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.