2010-03-18 6 views

Antwort

17

von 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

Heute _much_ einfacher es ist: nur ein 'WebClient' instanziiert und rufen' DownloadString' darauf. – Emdot

+0

Woher kommen die Variablen 'sb' und' buf'? Auch die Verbindung ist jetzt tot. – jbyrd

-1

Blick auf System.Net.WebClient, die docs haben sogar ein Beispiel die Datei zum Abrufen.

Wenn jedoch getestet wird, ob die Datei vorhanden ist, müssen Sie nach der Datei fragen und die Ausnahme abfangen, wenn sie nicht vorhanden ist.

3

eine Alternative zu HttpWebRequest ist 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); 
    } 

Beispiel von http://www.daveamenta.com/2008-05/c-webclient-usage/

66

Ich denke, die WebClient-Klasse für das geeignet ist:  

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

Können Sie die Voraussetzungen dafür eingeben? Ich bekomme 'Der Typ oder Namespace-Name 'WebClient' konnte nicht gefunden werden. – jbyrd

7

Erstens können Sie die binäre Datei herunterladen:

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

Dann können Sie Array von Strings für Textdatei machen (vorausgesetzt, UTF-8 und dass es sich um eine Textdatei):

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

Sie Ich erhalte jede (außer leere) Textzeile in jedem Array-Feld.

+1

Dies ist für die Windows-Endcodierung. Wenn Sie Zeilen für Linux aufteilen möchten, verwenden Sie "\ n". – pbies

0

Ein wenig einfacher:

string fileContent = new WebClient().DownloadString("yourURL"); 
Verwandte Themen