2013-06-03 26 views
14

Ich versuche, WebClient.UploadFile mit einer HTTPS-URL zu verwenden, aber ich lande mit"Handshake fehlgeschlagen ... unerwartetes Paketformat" bei Verwendung von WebClient.UploadFile() mit "https" erhalten, wenn der Server über ein gültiges SSL-Zertifikat verfügt

„System.IO.IOException: der Handshake ist fehlgeschlagen aufgrund eines unerwarteten Paketformat“

der gleiche Code funktioniert völlig in Ordnung mit Http aber der Server, die ich versuche, einen hit hat perfektes feines SSL-Zertifikat. Hier ist alles, was relevant für den Web-Aufruf:

var url = WebServiceCommunication.GetProtocolName() + "..."; //turns out to be  "https://... 
var wc = new WebClient(); 
//I am adding: 
wc.Headers.Add(HttpRequestHeader.KeepAlive, "...") 
wc.Headers.Add(HttpRequestHeader.AcceptLanguage, "...") 
we.Headers.Add(HttpRequestHeader.Cookie, "...") 

wc.UploadFile(url, "POST", filename); 

Ist das Problem mit einem der HttpRequestHeaders Ich füge und mit https mit denen? Oder fehlt mir ein notwendiger Header, wenn ich https benutzen möchte? Hat jemand irgendwelche Hinweise, warum dies mit HTTP aber nicht HTTPS funktionieren würde, wenn das SSL-Zertifikat gültig ist?

+0

Ähnliche Fehler in [ System.IO.IOException: Der Handshake ist aufgrund eines unerwarteten> Paketformats fehlgeschlagen?] (// stackoverflow.com/q/5178757) –

Antwort

14

Sie müssen sicherstellen, dass der entsprechende Port zu verbinden ist Port 443 anstelle von Port 80

Beispiel explizit die Port-Einstellung in der URL verwendet werden:

var request = (HttpWebRequest) WebRequest.Create("https://example.com:443/"); 
request.Method = "GET"; 
request.UserAgent = "example/1.0"; 
request.Accept = "*/*"; 
request.Host = "example.com"; 

var resp = (HttpWebResponse) request.GetResponse(); 
+2

Sie waren genau richtig. Ich hatte meine Web-Zeichenfolge als httpS://example.com:80 hartcodiert, notieren Sie das Konfliktprotokoll-80 und die URL beginnend mit HTTPS. Anfängerfehler. – TheLegendaryCopyCoder