我似乎无法理解这一个。我正在使用HttpWebRequest尝试将一些数据发送到另一个站点。我试图找出配置防火墙的最佳方法,但我不知所措。通过观察NetMon跟踪,它似乎忽略了我所说的内容;我看到的HTTP标头从请求中出来(不是浏览器到我的服务器请求,但是我的服务器到远程服务器请求)没有加起来。

Http: Request, CONNECT some.random.url:443
Command: CONNECT
URI: some.random.url:443
    Location: some.random.url:443
ProtocolVersion: HTTP/1.1
Host: some.random.url
ProxyConnection: Keep-Alive
HeaderEnd: CRLF

TCP DstPort似乎也始终以HTTP(80)开头。无论如何,我似乎无法最初处理443; SSL是否在端口80开始协商之前启动“真实”传输?要启动,这个请求似乎忽略了我在启动请求之前尝试设置的任何HttpWebRequest设置:即使我设置了HTTP 1.0,或者keep-alive为false,它仍然从上面的标题开始。

它在做什么?我想知道如何让它通过,但我不确定为什么它会表现出这种行为?

下面的代码,如果它有帮助。

Uri newUri = new Uri("https://some.random.url:443/random");
System.Net.HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(newUri);
wr.Method = "POST";
wr.ContentType = "application/x-www-form-urlencoded";
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] requestBytes = encoding.GetBytes("test");
wr.ContentLength = requestBytes.Length;
System.IO.Stream stream = wr.GetRequestStream(); //FAILS HERE, ServerProtocolViolation

我已经仔细研究了谷歌和其他SSL / HttpWebRequest问题,但无法想出银弹。

有帮助吗?

解决方案

您的问题似乎是ASP.NET服务器和远程服务器之间的代理服务器。您可以尝试不使用代理服务器(wr.Proxy = null),但这可能是您的网络设置所必需的。

我建议与负责服务器所在网络的人交谈,看看代理是否支持SSL传递(通过CONNECT命令.NET代表您发送)。

其他提示

我已经通过SSL完成了 HttpWebRequest 调用,并且从未遇到过这个问题。我唯一能看到你从未做过的事就是在URL中包含端口号(443)。

.NET应该处理SSL连接的创建,而不会在使用 https 协议时告知使用哪个端口。如果您还没有,请尝试没有端口号。如果你有,那我就没有想法;)

尝试这个,让我知道你是如何找到它的!

htw.Credentials =新的NetworkCredentials(用户名,密码)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top