IdHTTP l'authentification de base de violation d'accès
Je suis en train de faire une Authentification HTTP avec Indy HTTP classe. Mais pour une raison inconnue, j'obtiens une erreur de Violation d'Accès dans cette ligne:
IdHTTP1.Demande.L'authentification.Username: Nom D'Utilisateur= Utilisateur;
Le code tronçon 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;
Je suis en utilisant Delphi 2010, et a déjà essayé de faire quelque chose comme:
IdHTTP1.Demande.L'authentification.Username: nom d'utilisateur = "admin";
mais n'a pas résolu le problème...
Quand vous dites "violation d'accès" ou "erreur" ou "exception", vous devez nous dire l'erreur ou l'AV ou l'exception est (le exact message d'erreur, y compris toutes les adresses de la mémoire ou des codes d'erreur). Nous ne pouvons pas voir votre écran à partir de là où nous sommes, donc, si vous ne nous dites pas, nous ne le savons pas. (Sur la base des informations que vous avez fournies, vous obtenez une erreur lors de l'écriture
Bon, première chose: quand je suis en cours d'exécution .exe en dehors de l'compilateur/débogueur, il ne m'indique aucune erreur, il suffit de ne pas travailler... mais quand je suis débogage, j'obtiens cette erreur: Projet Project1.exe ont soulevé l'exception de la classe EAccessViolation avec message d'erreur " violation d'Accès à l'adresse 0051AC50 dans le module 'Project1.exe'. Lecture de l'adresse 00000000'.
Comme je l'ai dit; il n'y a pas
00000000
, ce qui signifie il n'y a aucune instance de l'objet créé pour IdHTTP1.Request.Authentication
.)Bon, première chose: quand je suis en cours d'exécution .exe en dehors de l'compilateur/débogueur, il ne m'indique aucune erreur, il suffit de ne pas travailler... mais quand je suis débogage, j'obtiens cette erreur: Projet Project1.exe ont soulevé l'exception de la classe EAccessViolation avec message d'erreur " violation d'Accès à l'adresse 0051AC50 dans le module 'Project1.exe'. Lecture de l'adresse 00000000'.
Comme je l'ai dit; il n'y a pas
Request.Authentication
instance de l'objet créé. Voir ma réponse.OriginalL'auteur HwTrap | 2012-09-15
Vous devez vous connecter pour publier un commentaire.
À partir d'une rapide vérification, il semble qu'il n'y a pas de
IdHTTP.Request.Authentication
nécessaire (et donc aucun n'est créé) lors de laRequest.BasicAuthentication
est vrai. Vous devriez être en utilisantRequest.UserName
etRequest.Password
à la place.Il ne peut pas travailler avec
Request.Authentication.Username
si vous utilisez l'authentification de base dans l'application d'autres, si tout le reste est le même. Sont les versions d'Indy le même dans les deux applications?OriginalL'auteur Ken White
Par défaut, le
Request.Authentication
objet n'est pas alloué jusqu'à ce qu'une demande a été envoyée et une réponse d'authentification a été reçue, laOnSelectAuthorization
événement est déclenché pour déterminer le type de classe d'allouer pour l'objet pour les demandes ultérieures..La seule autre façon le
Request.Authentication
objet peut être attribué si vous le faites manuellement dans votre propre code avant d'envoyer une demande, par exemple si vous savez à l'avance qui auth régime, le serveur utilise sans l'envoi d'une demande de découvrir de manière dynamique.OriginalL'auteur Remy Lebeau