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á 2109 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

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
Link para o comentário
Compartilhar em outros sites

  • Solution

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
Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • 10 meses depois ...
  • 2 meses depois ...
  • 2 meses depois ...

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.

 

Link para o comentário
Compartilhar em outros sites

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.

Link para o comentário
Compartilhar em outros sites

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"

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Este tópico foi criado há 2109 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.