System.Net.HttpWebRequestクラスを使用して、多数のサーバーで負荷分散されたWebアプリケーション用の特定のWebサーバーに対してHTTP GET要求を実行しようとしています。これを実現するには、リクエストのHostヘッダー値を設定できる必要があります。これをSystem.Net.WebProxyクラスを使用して実現できました。HttpWebRequestを使用してSSLリクエストのホストヘッダー値を設定する方法
ただし、SSLを使用してGETを実行しようとすると、これはすべて停止します。私がこれをしようとすると、HttpWebRequest.GetResponseの呼び出しは、HTTPステータスコードが400(Bad Request)のSystem.Net.WebExceptionをスローします。
私はHttpWebRequestで可能なことを達成しようとしていますか、あるいは私が欲しいものを実行する別の方法を探しているべきですか?
using System;
using System.Web;
using System.Net;
using System.IO;
namespace UrlPollTest
{
class Program
{
private static int suffix = 1;
static void Main(string[] args)
{
PerformRequest("http://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "");
PerformRequest("https://www.microsoft.com/en/us/default.aspx", "www.microsoft.com");
Console.WriteLine("Press any key to continue");
Console.ReadKey();
}
static void PerformRequest(string AUrl, string AProxy)
{
Console.WriteLine("Fetching from {0}", AUrl);
try
{
HttpWebRequest request = WebRequest.Create(AUrl) as HttpWebRequest;
if (AProxy != "")
{
Console.WriteLine("Proxy = {0}", AProxy);
request.Proxy = new WebProxy(AProxy);
}
WebResponse response = request.GetResponse();
using (Stream httpStream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(httpStream))
{
string s = reader.ReadToEnd();
File.WriteAllText(string.Format("D:\\Temp\\Response{0}.html", suffix++), s);
}
}
Console.WriteLine(" Success");
}
catch (Exception e)
{
Console.WriteLine(" " + e.Message);
}
}
}
}
本物の質問:ホストヘッダーが必要なことをどのように知っていますか? SSLを使用するとHTTP 1.1ホストヘッダーはサポートされません "http://support.microsoft.com/kb/187504 – russau
2番目の考え:ブラウザでSSL経由でファイルを取得できますか? – russau
Webアプリケーションが複数のサーバー間で負荷分散されている場合、正確なサーバーを指定できるように、ホストヘッダーを設定する必要があります。このコードは、私が作成しているWeb監視とテストのフレームワークの一部です。 はい、私がしようとしているSSLリクエストはブラウザで動作するので、問題はコードの中で同様の機能を実装しようとしています。リンクした記事では、SSL要求のホストヘッダーサポートがWindows Server 2003 SP1で利用可能になり、すべてのサーバーに完全にパッチを適用する必要があることが示唆されています。 – Cleggy