Comment télécharger un fichier sur HTTPS à l'aide d'Indy 10 et OpenSSL?

J'ai la tâche suivante: téléchargement d'un fichier à l'aide de HTTPS et d'authentification. Indy semble la voie à suivre, mais pour quelque raison il ne fonctionne pas si loin. J'ai le texte suivant à la place:

  • un TIdHTTP composant que j'utilise pour le téléchargement
  • un TIdURI composant utilisé pour créer l'URL
  • un TIdSSLIOHandlerSocketOpenSSL composant qui doivent assurer la sécurité de la connexion. Les Dll requises sont dans le dossier binaire.

Le site nécessite une authentification et je l'ai inclus le user/pass dans l'URL comme dans l'exemple ci-dessous. En bref voici le code:

URI := TIdURI.Create('https://test.example.com/');
URI.Username := ParamUserName;
URI.Password := ParamPassword;

HTTP := TIdHTTP.Create(nil);
if URI.Protocol = 'https' then
begin
  IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
  IOHandler.SSLOptions.Method := sslvSSLv3;
  HTTP.IOHandler := IOHandler;
end;

HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);

L'aide de ce code j'obtiens un "Délai d'attente" EIdReadTimeout exception très rapide. Test de l'URL dans un navigateur fonctionne sans problème. Toutes les idées sur ce qu'il manque ou ce que j'ai fait de mal?

Est-il un pare-feu / proxy entre l'application et le serveur? Navigateur des œuvres " ne veut pas dire qu'il ya une connexion directe à Internet.
Si je regarde dans les paramètres du navigateur il n'y a pas de proxy défini. Aussi, le fait que le WinInet approche fonctionne sans proxy me dit que ce n'est pas le problème.
N'utilisez pas le TIdURI.Nom d'utilisateur/mot de passe de propriétés dans cette situation. Vous devez utiliser le TIdHTTP.Nom d'utilisateur/Mot de passe de propriétés à la place.

OriginalL'auteur Tihauan | 2010-02-11