2009-03-31 25 views
7

El siguiente código falla con una excepción de 400 solicitudes incorrectas. Mi conexión de red es buena y puedo ir al sitio pero no puedo obtener esta uri con HttpWebRequest.¿Por qué mi solicitud HttpWebRequest Return 400 Bad?

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);     
    } 
} 
+0

¿es asp.net o forma de Windows? – eglasius

Respuesta

13

En primer lugar, emitir el WebRequest a un HttpWebRequest así:

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)"; 
+0

¡Esto funciona como un campeón! – user74373

3

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

+0

Buena conjetura. Esto es interno al proxy que estoy escribiendo. – user74373

4

Puede haber muchas causas para este problema. ¿Tiene más detalles sobre la WebException?

Una causa, con la que me he encontrado antes, es que tienes una cadena de agente de usuario incorrecta. Algunos sitios web (por ejemplo, google) comprueban que las solicitudes provengan de agentes de usuarios conocidos para evitar que los bots automatizados lleguen a sus páginas.

De hecho, es posible que desee comprobar que el acuerdo del usuario para YouTube no le impide hacer lo que está haciendo. Si lo hace, entonces lo que está haciendo se puede lograr mejor al pasar por canales aprobados, como los servicios web.

5

Establecer agente de usuario y Referer en su 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); 
} 
+0

Sugiero que use Debug.WriteLine (por ejemplo, ToString()), por lo que obtiene la excepción completa, no solo el mensaje. –

+0

@John, eso hace notar –

Cuestiones relacionadas