Ho il seguente compito: scaricare un file usando HTTPS e autenticazione. Indy sembra la strada da percorrere, ma per qualche motivo non funziona fino ad ora. Ho il seguente al suo posto:Come scaricare un file su HTTPS usando Indy 10 e OpenSSL?
- un componente TIdHTTP che uso per il download
- un componente TIdURI utilizzato per creare l'URL
- un componente TIdSSLIOHandlerSocketOpenSSL che dovrebbe fornire la connessione sicura. Le DLL richieste si trovano nella cartella binaria.
Il sito richiede anche l'autenticazione e ho incluso l'utente/pass nell'URL come nell'esempio seguente. In breve questo è il codice:
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);
Utilizzando questo codice ottengo un'eccezione EIdReadTimeout "Leggi Timeout" molto veloce. Testare l'URL in un browser funziona senza problemi. Qualche idea su cosa manca o cosa ho fatto di sbagliato?
C'è un firewall/proxy tra l'applicazione e il server? 'Browser funziona' non significa che ci sia una connessione Internet diretta. – mjn
@mjustin Se guardo nelle impostazioni del browser non è definito alcun proxy. Inoltre, il fatto che l'approccio WinInet funzioni senza impostare alcun proxy mi dice che non è questo il problema. – Tihauan
Non utilizzare le proprietà TIdURI.Username/password in questa situazione. Devi invece utilizzare le proprietà TIdHTTP.Username/Password. –