Estoy tratando de usar la clase System.Net.HttpWebRequest para realizar una solicitud HTTP GET a un servidor web específico para aplicaciones web que hemos equilibrado de carga en numerosos servidores. Para lograr esto, necesito poder establecer el valor del encabezado de host para la solicitud, y he podido lograr esto usando la clase System.Net.WebProxy.Cómo establecer un valor de encabezado de host para solicitudes SSL usando HttpWebRequest
Sin embargo, todo esto se descompone cuando trato de realizar un GET usando SSL. Cuando intento hacer esto, la llamada a HttpWebRequest.GetResponse arroja una System.Net.WebException, con un código de estado HTTP de 400 (Bad Request).
¿Es lo que intento lograr con HttpWebRequest, o debería buscar una forma alternativa de realizar lo que quiero?
Este es el código que he estado utilizando para tratar de conseguir todo esto a trabajar: -
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);
}
}
}
}
Pregunta original: ¿Cómo sabes que necesitas un encabezado de host? "Los encabezados de host HTTP 1.1 no son compatibles cuando usa SSL" http://support.microsoft.com/kb/187504. – russau
Segundo pensamiento: ¿puedes obtener el archivo a través de SSL en un navegador? – russau
Necesito configurar un encabezado de host para poder especificar el servidor exacto al que se debe acceder si la aplicación web está balanceada de carga en varios servidores. Este código es parte de un marco de monitoreo y prueba web que estoy escribiendo. Y sí, las solicitudes de SSL que intento hacer funcionan en el navegador, por lo que el problema se encuentra en algún punto de la forma en que intento implementar una función similar en el código. El artículo que vinculó sugiere que el soporte del encabezado de host para las solicitudes de SSL estuvo disponible en Windows Server 2003 SP1, y todos nuestros servidores deberían estar completamente actualizados. – Cleggy