2012-04-11 2 views
6

J'utilise HttpWebRequest et j'obtiens une erreur lors de l'exécution de GetResponse().HttpWebRequest Erreur: serveur 503 indisponible

I en utilisant ce code:

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

Avez-vous eu la même erreur lors de la demande l'URL dans un navigateur ou un outil comme boucle? – jlafay

+1

Cela ressemble à une URL décidément étrange à récupérer par programmation. Une raison pour cela? –

+1

http://www.google.com/sorry/ renvoie un 503. Si vous essayez d'automatiser un grand nombre de requêtes sur Google, vous pouvez obtenir cette URL. Mais comme Jon Skeet l'a demandé, pourquoi soumettez-vous des demandes à cette URL en premier lieu? Voir http://support.google.com/websearch/bin/answer.py?hl=fr&answer=86640 –

Répondre

11

Le serveur renvoie vraiment un code d'état 503 HTTP. Cependant, il renvoie également un corps de réponse avec la condition d'erreur 503 (le contenu que vous voyez dans un navigateur si vous ouvrez cette URL).

Vous avez accès à la réponse à Response propriété de l'exception (en cas il y a une réponse 503, l'exception qui est soulevée est WebException, qui possède une propriété Response). vous devez attraper cette exception et de gérer correctement

Concrètement, votre code pourrait ressembler à ceci:

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

ce code de travail .. merci beaucoup –

+1

@Ainun Nuha J'essaie de traduire le texte de la Thaïlande à l'anglais, mais je suis confronté à un problème similaire. Je reçois une exception à GetResponse() qui est interceptée dans le bloc catch(). Mais il envoie du HTML de la page complète avec le contenu "Web Page Bloqué". Comment puis-je obtenir la chaîne traduite en anglais. – RSB

Questions connexes