当服务器具有有效的SSL证书时,使用带有“https”的WebClient.UploadFile()时,“握手失败…意外的数据包格式”

我试图使用WebClient.UploadFile与HTTPS URL,但我最终得到

“System.IO.IOException:由于意外的数据包格式,握手失败”

相同的代码与Http完全正常,但我想要的服务器有一个非常好的ssl证书。 以下是与网络电话相关的任何内容:

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

我正在添加和使用https的任何HttpRequestHeaders的问题是什么? 或者,如果我想使用https,我是否错过了必要的标题? 当SSL证书有效时,有没有人指出为什么这可以用于HTTP而不是HTTPS?

您必须确保要连接的端口是端口443而不是端口80。

显式设置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();