Cle*_*ggy 6 c# asp.net system.net
我正在尝试使用System.Net.HttpWebRequest类对特定Web服务器执行HTTP GET请求,以便我们在众多服务器上进行负载平衡的Web应用程序.为了实现这一点,我需要能够为请求设置Host头值,并且我已经能够通过使用System.Net.WebProxy类来实现这一点.
但是,当我尝试使用SSL执行GET时,这一切都会崩溃.当我尝试这样做时,对HttpWebRequest.GetResponse的调用抛出System.Net.WebException,HTTP状态代码为400(错误请求).
我正在尝试用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);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我之前使用过一种 hacky 方法 - 使用一个测试 exe 来修改我的“hosts”文件,将场名称的条目注入到特定服务器的地址(并发出 )ipconfig /flushdns。之后,请求应该被路由到正确的服务器,就好像它是那里唯一的服务器一样。
显然,这需要管理员访问权限...我将其用作自动冒烟测试的一部分,就像它是单独的机器一样对农场进行测试。
您可能会尝试的另一件事是 NLB 上的某些内容,也许在 TCL 中(在 F5 的情况下) - 也许添加 NLB 可以理解的自定义标头?(假设它正在进行 SSL 重新签名)。
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |