2017-04-09 1 views
0

Essayez de créer une demande get deux fois. Cependant, la seconde requête lance toujours WebException avec un message: "La connexion sous-jacente était fermée: la connexion a été fermée de manière inattendue.".Net HttpWebRequest Obtenir la requête return WebException

Voici le code spinet je

public string Get(string url) 
    { 
     string strResult = ""; 
     try 
     { 
      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Method = "GET"; 
      request.CookieContainer = new CookieContainer(); 
      request.UserAgent = this.UserAgent; 
      request.KeepAlive = false; 

      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      Stream stream = response.GetResponseStream(); 
      StreamReader reader = new StreamReader(stream, Encoding.UTF8); 
      strResult = reader.ReadToEnd(); 
      response.Close(); 
     } 
     catch (Exception ex) 
     { 
      //Todo 
     } 
     return strResult; 
    } 

et je suis demande à ce url

Si je commence Fiddler semble deuxième demande fonctionne normalement. Si j'utilise la classe HttpClient, cela semble fonctionner aussi bien.

+0

[Aide! Running Fiddler Fixes mon application ???] (http://www.telerik.com/blogs/help!-running-fiddler-fixes-my-app-) ce poste explique beaucoup, ainsi que [Utilisation de HttpClient avec SSL/Authentification côté client basée sur TLS] (https://pfelix.wordpress.com/2012/12/16/using-httpclient-with-ssltls/) – Fish

+0

change request.KeepAlive = true; corrigé mon problème – Fish

Répondre

0

Y a-t-il un décalage entre les requêtes lorsque vous lancez fiddler (touchez-vous un point d'arrêt entre les deux)? Peut-être ajouter rapidement un Thread.Sleep(250); entre vos appels.

Un autre point à faire, ajoutez quelques instructions using qui fermeront les classes jetables.

try { 
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
    request.Method = "GET"; 
    request.CookieContainer = new CookieContainer(); 
    request.UserAgent = this.UserAgent; 
    request.KeepAlive = false; 

    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
    using (Stream stream = response.GetResponseStream()) 
    using (StreamReader reader = new StreamReader(stream, Encoding.UTF8)) { 
     strResult = reader.ReadToEnd(); 
     response.Close(); 
} 
+0

Avait essayé votre code encore jeter une exception sur la deuxième demande. Cependant, si je demande google (www.google.com), cela fonctionne bien. – Fish