2016-09-03 7 views
2

Der Versuch, xml-Datei zum Herunterladen von https-URL (https://nvd.nist.gov/download/nvd-rss.xml)Fehler WebClient als Datei herunterzuladen von https-URL

Diese URL ist offen zugänglich durch Browser.

Verwendung von C# -Webclient mit Konsolenprojekt.

Aber Ausnahme immer wie unten

using (WebClient client = new WebClient()) 
    { 
      System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3; 
      client.DownloadFile(uri, @"c:\test\nvd-rss.xml"); 
    } 

$ exception { "Die zugrunde liegende Verbindung wurde geschlossen:. Ein unerwarteter Fehler bei einer senden"} System.Net.WebException

versucht, indem alle Eigenschaften wie SSL usw. zu system.Net, hat aber nicht geholfen.

Antwort

6

Der Grund ist Standort in Frage unterstützt nur TLS 1.2. In .NET ist der Standardwert für System.Net.ServicePointManager.SecurityProtocolSsl | Tls, was bedeutet, dass der .NET-Client Tls 1.2 standardmäßig nicht unterstützt (dieses Protokoll wird bei der SSL-Verhandlung nicht in der Liste der unterstützten Protokolle aufgeführt). Zumindest ist das bei vielen .NET Framework-Versionen der Fall, nicht sicher, ob für alle. Aber .NET unterstützt wirklich TLS 1.2, und um es zu aktivieren, sollten Sie einfach Folgendes tun:

Und Sie sollten in Ordnung sein. Natürlich ist es besser, mehr als ein TLS 1.2-Protokoll zu unterstützen, weil System.Net.SecurityProtocolType eine globale Einstellung und nicht alle Seiten unterstützen TLS 1.2:

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls | System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12; 
+0

Vielen Dank für die Lösung und Erklärung. Das hat perfekt funktioniert. –

+0

Gut! Markieren Sie als Antwort, um anderen Personen mit ähnlicher Frage zu helfen, die Antwort schneller zu finden. – Evk

0

Versuchen mit diesem:

using (HttpClient client = new HttpClient()) 
{ 
     var response = await client.GetAsync("https://nvd.nist.gov/download/nvd-rss.xml"); 

     string xml = await response.Content.ReadAsStringAsync(); 
     //or as byte array if needed 
     var xmlByteArray = await response.Content.ReadAsByteArrayAsync(); 
     //or as stream 
     var xmlStream = await response.Content.ReadAsStreamAsync(); 

     //write to file 
     File.WriteAllBytes(@"c:\temp\test.xml", xmlByteArray) 

} 
+0

Danke für Antworten. Versucht dies, aber das hat keine Anfrage ausgelöst oder eine Antwort erhalten. Auch im Fiddler verifiziert. var response = await client.GetAsync ("https://nvd.nist.gov/download/nvd-rss.xml"); –

Verwandte Themen