2010-03-18 7 views

Répondre

17

de http://www.csharp-station.com/HowTo/HttpWebFetch.aspx

HttpWebRequest request = (HttpWebRequest) 
     WebRequest.Create("myurl"); 

     // execute the request 
     HttpWebResponse response = (HttpWebResponse) 
      request.GetResponse(); 
      // we will read data via the response stream 
     Stream resStream = response.GetResponseStream(); 
    string tempString = null; 
    int count  = 0; 

    do 
    { 
     // fill the buffer with data 
     count = resStream.Read(buf, 0, buf.Length); 

     // make sure we read some data 
     if (count != 0) 
     { 
      // translate from bytes to ASCII text 
      tempString = Encoding.ASCII.GetString(buf, 0, count); 

      // continue building the string 
      sb.Append(tempString); 
     } 
    } 
    while (count > 0); // any more data to read? 

    // print out page source 
    Console.WriteLine(sb.ToString()); 
+7

Aujourd'hui, il est plus simple _beaucoup_: il suffit instancier un '' WebClient' et appeler DownloadString' là-dessus. – Emdot

+0

D'où viennent les variables 'sb' et' buf'? Aussi le lien est mort maintenant. – jbyrd

-1

Regardez System.Net.WebClient, les docs ont même un exemple de récupérer le fichier.

Mais tester si le fichier existe implique de demander le fichier et d'intercepter l'exception si ce n'est pas le cas.

3

une alternative à HttpWebRequest est WebClient

// create a new instance of WebClient 
    WebClient client = new WebClient(); 

    // set the user agent to IE6 
    client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)"); 
    try 
    { 
     // actually execute the GET request 
     string ret = client.DownloadString("http://www.google.com/"); 

     // ret now contains the contents of the webpage 
     Console.WriteLine("First 256 bytes of response: " + ret.Substring(0,265)); 
    } 
    catch (WebException we) 
    { 
     // WebException.Status holds useful information 
     Console.WriteLine(we.Message + "\n" + we.Status.ToString()); 
    } 
    catch (NotSupportedException ne) 
    { 
     // other errors 
     Console.WriteLine(ne.Message); 
    } 

exemple de http://www.daveamenta.com/2008-05/c-webclient-usage/

66

Je pense que la WebClient classe est appropriée pour que:  

WebClient client = new WebClient(); 
Stream stream = client.OpenRead("http://yoururl/test.txt"); 
StreamReader reader = new StreamReader(stream); 
String content = reader.ReadToEnd(); 

http://msdn.microsoft.com/en-us/library/system.net.webclient.openread.aspx

+0

Pourriez-vous remplir les conditions préalables pour cela? J'obtiens 'Le type ou le nom de l'espace de noms 'WebClient' n'a pas pu être trouvé' – jbyrd

7

D'abord, vous pouvez télécharger le fichier binaire:

public byte[] GetFileViaHttp(string url) 
{ 
    using (WebClient client = new WebClient()) 
    { 
     return client.DownloadData(url); 
    } 
} 

Ensuite, vous pouvez faire un tableau de chaînes pour le fichier texte (en supposant UTF-8 et qu'il est un fichier texte):

var result = GetFileViaHttp(@"http://example.com/index.html"); 
string str = Encoding.UTF8.GetString(result); 
string[] strArr = str.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries); 

Vous recevra chaque ligne de texte (sauf vide) dans chaque champ de tableau.

+1

Ceci est pour l'encodage de fin de ligne Windows. Si vous souhaitez diviser des lignes pour Linux, utilisez "\ n". – pbies

0

Un peu plus facile chemin:

string fileContent = new WebClient().DownloadString("yourURL"); 
Questions connexes