31

我正在尝试将 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);

我添加的任何 HttpRequestHeaders 和使用 https 的问题是否存在?或者如果我想使用 https,我是否缺少必要的标题?当 SSL 证书有效时,是否有人对为什么这适用于 HTTP 而不是 HTTPS 有任何指示?

4

2 回答 2

43

您必须确保要连接的端口是端口 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();
于 2014-02-01T16:50:19.303 回答
8

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

于 2020-02-25T21:31:07.760 回答