我似乎无法理解这一点。我正在使用 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
我已经搜索过 Google 和其他 SSL/HttpWebRequest 问题,但找不到灵丹妙药。