Getting "Handshake failed...unexpected packet format" when using WebClient.UploadFile() with "https" when the server has a valid SSL certificate

77,688

Solution 1

You have to make sure the port you are connecting to is port 443 instead of port 80.

Example of explicitly setting the port to be used in the URL:

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();

Solution 2

You can also get this error if you're clueless like me and don't recognize that your web server project has crashed and is no longer running.

Share:
77,688
user1867353
Author by

user1867353

Updated on February 26, 2020

Comments

  • user1867353
    user1867353 about 4 years

    I am trying to use WebClient.UploadFile with a HTTPS URL but I am ending up with

    "System.IO.IOException: The handshake failed due to an unexpected packet format"

    The same code works perfectly fine with Http but the server that I am trying to hit has a perfectly fine ssl certificate. Here is anything relevant to the web call:

    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);
    

    Is the issue with any of the HttpRequestHeaders I am adding AND using https with those? Or am I missing a necessary header if I want to use https? Does anyone have any pointers as to why this would work with HTTP but NOT HTTPS when the SSL cert is valid?

  • TheLegendaryCopyCoder
    TheLegendaryCopyCoder almost 9 years
    You were spot on. I had hardcoded my web string as httpS://example.com:80, note the conflicting protocol-80 and the url starting with HTTPS. Rookie mistake.