2012-04-11 30 views
6

Estoy usando HttpWebRequest y obtengo un error al ejecutar GetResponse().HttpWebRequest Error: servidor 503 no disponible

I utilizando este código:

private void button1_Click(object sender, EventArgs e) 
    { 
     Uri myUri = new Uri("http://www.google.com/sorry/?continue=http://www.google.com/search%3Fq%3Dyamaha"); 
     // Create a 'HttpWebRequest' object for the specified url. 
     HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
     // Set the user agent as if we were a web browser 
     myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"; 

     HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
     var stream = myHttpWebResponse.GetResponseStream(); 
     var reader = new StreamReader(stream); 
     var html = reader.ReadToEnd(); 
     // Release resources of response object. 
     myHttpWebResponse.Close(); 

     textBox1.Text = html; 
    } 
+0

¿Recibió el mismo error al solicitar la dirección URL en un navegador o una herramienta como rizo? – jlafay

+1

Parece una URL decididamente extraña para buscar mediante programación. ¿Alguna razón para eso? –

+1

http://www.google.com/sorry/ devuelve un 503. Si intenta automatizar una gran cantidad de consultas a Google, puede obtener esa URL. Pero como Jon Skeet preguntó, ¿por qué estás enviando solicitudes a esa URL en primer lugar? Consulte http://support.google.com/websearch/bin/answer.py?hl=es&answer=86640 –

Respuesta

11

realmente el servidor devuelve un código de estado HTTP 503. Sin embargo, también devuelve un cuerpo de respuesta junto con la condición de error 503 (el contenido que ve en un navegador si abre esa URL).

usted tiene acceso a la respuesta en la propiedad de la excepción Response (en caso de que haya una respuesta 503, excepto que se plantea es una WebException, que tiene una propiedad Response). tienes que tomar esta excepción y manejarlo adecuadamente

Concretamente, el código podría tener este aspecto:

string html; 

try 
{ 
    var myUri = new Uri("http://www.google.com/sorry/?continue=http://www.google.com/search%3Fq%3Dyamaha"); 
    // Create a 'HttpWebRequest' object for the specified url. 
    var myHttpWebRequest = (HttpWebRequest)WebRequest.Create(myUri); 
    // Set the user agent as if we were a web browser 
    myHttpWebRequest.UserAgent = @"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4"; 

    var myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse(); 
    var stream = myHttpWebResponse.GetResponseStream(); 
    var reader = new StreamReader(stream); 
    html = reader.ReadToEnd(); 
    // Release resources of response object. 
    myHttpWebResponse.Close(); 
} 
catch (WebException ex) 
{ 
    using(var sr = new StreamReader(ex.Response.GetResponseStream())) 
     html = sr.ReadToEnd(); 
} 

textBox1.Text = html; 
+0

este código funciona .. muchas gracias –

+1

@Ainun Nuha Estoy tratando de traducir el texto de Tailandia al inglés, pero estoy enfrentando un problema similar. Obtengo excepción en GetResponse() que está atrapado en el bloque catch(). Pero envía HTML de página completa con contenido "Página web bloqueada". ¿Cómo puedo traducir la cadena al inglés? – RSB

Cuestiones relacionadas