2

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

4

3 に答える 3

4

問題は、ASP.NET サーバーとリモート サーバーの間のプロキシ サーバーにあるようです。プロキシ サーバー (wr.Proxy = null) を使用しないようにすることもできますが、これはネットワークのセットアップに必要な場合があります。

サーバーがあるネットワークの責任者と話し、プロキシがSSLパススルーをサポートしているかどうかを確認することをお勧めします(.NETがあなたに代わって送信するCONNECTコマンドを介して)。

于 2008-12-31T04:44:26.107 に答える
0

HttpWebRequestSSL 経由で呼び出しを行ったことがありますが、この問題に遭遇したことはありません。私がやったことのない唯一のことは、URL にポート番号 (443) を含めることです。

https.NET は、プロトコルを使用するときに使用するポートを指定することなく、SSL 接続の作成を処理する必要があります。まだ行っていない場合は、ポート番号なしで試してください。もしそうなら、私はアイデアがありません;)

于 2008-12-30T15:01:08.903 に答える
0

これを試して、あなたがそれを見つける方法を教えてください!

htw.Credentials = 新しい NetworkCredentials(ユーザー名、パスワード)

于 2009-06-10T14:36:49.210 に答える