2009-10-24 12 views
2

J'essaie de lire un fichier distant à l'aide de HttpWebRequest dans une application console C#. Mais pour une raison quelconque, la demande est vide - elle ne trouve jamais l'URL.Lecture du fichier distant [C#]

Ceci est mon code:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://uo.neverlandsreborn.org:8000/botticus/status.ecl"); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Comment se fait ce n'est pas possible?

Le fichier contient uniquement une chaîne. Rien de plus!

+1

Ultima Online ... ouais! –

Répondre

12

Comment êtes-vous en train de lire les données de réponse? Est-ce qu'il revient avec succès mais vide, ou y a-t-il un statut d'erreur? Si cela ne vous aide pas, essayez Wireshark, ce qui vous permettra de voir ce qui se passe au niveau du réseau.

Aussi, pensez à utiliser WebClient au lieu de WebRequest - il ne le rendre incroyablement facile quand vous n'avez pas besoin de faire quoi que ce soit sophistiqué:

string url = "http://uo.neverlandsreborn.org:8000/botticus/status.ecl"; 
WebClient wc = new WebClient(); 
string data = wc.DownloadString(url); 
+0

... +1 pour m'avoir présenté à une nouvelle classe. –

+0

Hmm, pour une raison quelconque, le serveur renvoie une erreur de protocole. C'est étrange! La même chose vaut pour Matthews. – janhartmann

+0

Quel type d'erreur de protocole? Avez-vous des détails? Jetez un œil à Wireshark pour voir ce qu'il envoie et ce que le navigateur envoie. –

3

Vous devez obtenir le flux de réponse et lire les données à partir de cela. Voici une fonction que j'ai écrit pour un projet qui fait exactement cela:

private static string GetUrl(string url) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.CreateDefault(new Uri(url)); 
     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 
      if (response.StatusCode != HttpStatusCode.OK) 
       throw new ServerException("Server returned an error code (" + ((int)response.StatusCode).ToString() + 
        ") while trying to retrieve a new key: " + response.StatusDescription); 

      using (var sr = new StreamReader(response.GetResponseStream())) 
      { 
       return sr.ReadToEnd(); 
      } 
     } 
    } 
+2

Vous devriez aussi mettre la réponse dans une instruction using. (J'essayerais aussi de ne pas déclarer de variables avant le premier usage, en principe général.) –

+0

+1 sur deux points ... Les définitions de split étaient un artefact historique quand je l'ai refacté à une fonction séparée après avoir réalisé Je copiais/collais ce code à plusieurs endroits. –