私はこれについて頭をつかむことができないようです。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 の問題を精査しましたが、特効薬は思いつきません。