8 votes

Violation de l'accès à l'authentification de base IdHTTP

J'essaie de faire une authentification HTTP avec la classe Indy HTTP. Mais pour une raison inconnue, je reçois une erreur de violation d'accès dans cette ligne : IdHTTP1.Request.Authentication.Username := Username ;

L'étirement du code est :

  IdHTTP1:= TIdHttp.Create(Application);
  IdHTTP1.ConnectTimeout:= 10000;
  IdHTTP1.Request.Clear;
  IdHTTP1.Request.BasicAuthentication:= true;
  IdHTTP1.Request.Authentication.Username := Username;
  IdHTTP1.Request.Authentication.Password := Password;
      try
        IdHTTP1.Get(PbxURL);
        HttpCode := IdHTTP1.ResponseCode;
      except
        on E: EIdHTTPProtocolException do
          HttpCode := IdHTTP1.ResponseCode;

J'utilise Delphi 2010, et j'ai déjà essayé de faire quelque chose comme ça : IdHTTP1.Request.Authentication.Username := 'admin' ; mais ça n'a pas résolu le problème...

20voto

Ken White Points 73213

D'après une vérification rapide, il semble qu'il n'y ait pas de IdHTTP.Request.Authentication nécessaire (et donc aucune n'est créée) lorsque l'option Request.BasicAuthentication est vrai. Vous devriez utiliser Request.UserName y Request.Password à la place.

IdHTTP1:= TIdHttp.Create(Application);
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.Request.Clear;
IdHTTP1.Request.BasicAuthentication:= true;
IdHTTP1.Request.UserName := UserName;
IdHTTP1.Request.Password := Password;

3voto

Remy Lebeau Points 130112

Par défaut, le Request.Authentication n'est pas alloué avant qu'une demande ait été envoyée et qu'une réponse d'authentification ait été reçue, alors l'objet OnSelectAuthorization est déclenché pour déterminer le type de classe à allouer à l'objet pour les requêtes suivantes

La seule autre façon pour le Request.Authentication peut être alloué est si vous le faites manuellement dans votre propre code avant d'envoyer une requête, par exemple si vous savez à l'avance quel schéma d'authentification le serveur utilise sans envoyer une requête pour le découvrir dynamiquement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X