2015-08-06 10 views
5

Ho un URL HTTPS che getta sotto eccezione:HTTPS URL utilizzando il WebDownloadClient genera un'eccezione

Exception Details: System.Exception: The underlying connection was closed: An unexpected error occurred on a send. ---> System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Received an unexpected EOF or 0 bytes from the transport stream.

Ho provato ad utilizzare la versione HTTP di URL e che sta lavorando. Ho anche controllato se gli URL https sono accessibili dalla macchina e sono accessibili senza errori, ma non rispondono al codice sottostante. Anche questo problema è specifico della macchina.

Linea di errore di lancio Codice:

using (WebDownloadClient wc = new WebDownloadClient()) 
{ 
    wc.Headers.Add("Content-Encoding", "gzip"); 
    wc.Headers.Add("Accept-Encoding", "gzip, compress"); 
    wc.DownloadFile(url, fileName); 
} 
+1

Che 'WebDownloadClient' è? Potresti fornire l'implementazione del metodo 'DownloadFile'? – Kamo

+1

@Kamo DownloadFile è un metodo integrato di System.Net.WebClient – Pritam

+0

Dai un'occhiata a questo http://stackoverflow.com/questions/20064505/requesting-html-over-https-with-c-sharp-webclient –

risposta

2
ServicePointManager.ServerCertificateValidationCallback += ValidateRemoteCertificate; 
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 ; 

    using (WebDownloadClient wc = new WebDownloadClient()) 
    { 
     wc.Headers.Add("Content-Encoding", "gzip"); 
     wc.Headers.Add("Accept-Encoding", "gzip, compress"); 
     wc.DownloadFile(url, fileName); 
    } 

private static bool ValidateRemoteCertificate(object sender, X509Certificate cert, X509Chain chain, SslPolicyErrors error) 
{ 
    if (error == System.Net.Security.SslPolicyErrors.None) 
    { 
     return true; 
    } 
    return false; 
} 

Tratto da Requesting html over https with c# Webclient

+0

I cam attraverso una riga sottostante nel codice. Ciò impone di utilizzare solo certificati validi? ServicePointManager.CertificatePolicy = new CertificatePolicy(); – Pritam

+0

Quando la proprietà CertificatePolicy è impostata su un oggetto di interfaccia ICertificatePolicy, l'oggetto ServicePointManager utilizza il criterio del certificato definito in tale istanza anziché il criterio del certificato predefinito. Il criterio del certificato predefinito consente certificati validi e certificati validi scaduti. –

+0

Grazie a @HyunMi. Inoltre ho osservato su m/c potrei accedere all'URL di https nel browser ma attraverso il codice ottengo l'eccezione sopra. – Pritam