Pregunta

El siguiente código falla con una solicitud mal excepción 400. Mi conexión de red es buena y puede ir al sitio pero no puedo conseguir este URI con HttpWebRequest.

private void button3_Click(object sender, EventArgs e)
{
    WebRequest req = HttpWebRequest.Create(@"http://www.youtube.com/");
    try
    {
        //returns a 400 bad request... Any ideas???
        WebResponse response = req.GetResponse();
    }
    catch (WebException ex)
    {
        Log(ex.Message);                
    }
}
¿Fue útil?

Solución

En primer lugar, que tire la WebRequest a un HttpWebRequest como esto:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(@"http://www.youtube.com/");

A continuación, agregue esta línea de código:

req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

Otros consejos

Set agente de usuario y Referer en HttpWebRequest

var request = (HttpWebRequest)WebRequest.Create(@"http://www.youtube.com/");
request.Referer = "http://www.youtube.com/"; // optional
request.UserAgent =
    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; " +
    "Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; " +
    ".NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618; " +
    "InfoPath.2; OfficeLiveConnector.1.3; OfficeLivePatch.0.0)";
try
{
    var response = (HttpWebResponse)request.GetResponse();
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        var html = reader.ReadToEnd();
    }
}
catch (WebException ex)
{
    Log(ex);
}

Puede haber muchas causas para este problema. ¿Tiene algún más detalles acerca de la WebException?

Una de las causas, que me he encontrado antes, es que tiene una cadena de agente de usuario mal. Algunos sitios web (Google por ejemplo) comprobar que las solicitudes son procedentes de los agentes de usuario conocida de prevenir los robots automatizados de golpear a sus páginas.

De hecho, es posible que desee comprobar que el acuerdo de usuario de YouTube no le impide hacer lo que está haciendo. Si lo hace, entonces lo que está haciendo puede conseguirse mejor por ir a través de los canales aprobados, tales como servicios web.

Tal vez usted tiene un servidor proxy en marcha, y no se ha establecido la propiedad Proxy de la HttpWebRequest?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top