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

use*_*353 22 c# https webclient http visual-studio-2010

我试图使用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);
Run Code Online (Sandbox Code Playgroud)

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

ren*_*ene 25

您必须确保要连接的端口是端口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();
Run Code Online (Sandbox Code Playgroud)

  • 你当场了.我将我的网络字符串硬编码为httpS://example.com:80,注意冲突的协议-80和以HTTPS开头的网址.菜鸟错了. (4认同)

Bri*_*den 8

如果您像我一样一无所知,并且没有意识到您的 Web 服务器项目已经崩溃并且不再运行,您也可能会收到此错误。