Feedback

URL per WebRequest auslesen

Sprache: C#

Immer wieder taucht in div. Foren und Newsgroups die Frage auf wie man eine URL einlesen und das Ergebnis in einem string speichern kann. Vor längerer Zeit habe ich mir dafür eine Methode geschrieben, die genau diese Sache erledigt:
public static string GetUrlResponse(string url,string username,string password)
{
    string content = null;
 
    WebRequest webRequest = WebRequest.Create(url);
 
    if(username == null || password == null)
    {
        NetworkCredential networkCredential = new NetworkCredential(username, password);
        webRequest.PreAuthenticate = true;
        webRequest.Credentials = networkCredential;
    }
 
    WebResponse webResponse = webRequest.GetResponse();
 
    StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII);
    StringBuilder contentBuilder = new StringBuilder();  
    while (-1 != sr.Peek())
    {
        contentBuilder.Append(sr.ReadLine());
        contentBuilder.Append("rn");
    }
    content = contentBuilder.ToString();
 
    return content.ToString();
}
public static string GetUrlResponse(string url,string username,string password)
{
    string content = null;
 
    WebRequest webRequest = WebRequest.Create(url);
 
    if(username == null || password == null)
    {
        NetworkCredential networkCredential = new NetworkCredential(username, password);
        webRequest.PreAuthenticate = true;
        webRequest.Credentials = networkCredential;
    }
 
    WebResponse webResponse = webRequest.GetResponse();
 
    StreamReader sr = new StreamReader(webResponse.GetResponseStream(), Encoding.ASCII);
    StringBuilder contentBuilder = new StringBuilder();  
    while (-1 != sr.Peek())
    {
        contentBuilder.Append(sr.ReadLine());
        contentBuilder.Append("rn");
    }
    content = contentBuilder.ToString();
 
    return content.ToString();
}

4 Kommentare

  1. Zu meiner Schande muss ich gestehen, dass ich dieses Snippet dazu missbrauchen wollte, um das Geburtstags-Rätsel (http://blog.jan-welker.de/2008/02/10/Geburtstagsgewinnspiel2JahreNetSnippetsde.aspx) zu lösen.
    Das Snippet hat mich den Sieg gekostet, weil es einen kleinen Fehler enthält. Es werden nämlich nicht immer alle Zeilen der WebResponse zurückgegeben!
    Erst wenn man z.B.
    [code]
    StringBuilder contentBuilder = new StringBuilder();
    while (-1 != sr.Peek())
    {
    contentBuilder.Append(sr.ReadLine());
    contentBuilder.Append(„rn“);
    }
    content = contentBuilder.ToString();
    [/code]

    durch

    [code]
    content = sr.ReadToEnd();
    [/code]

    ersetzt, werden alle Zeilen eingelesen.
    Naja, verdient hab ichs 😉

  2. Hallo. Super snippet. Es fehlte noch eine Fehlerabfrage von WebResponse, falls die Seite nicht verfügbar ist. Und content.ToString ist fehlerbehaftet, da ein String.ToString keinen Sinn macht. Im Gegenteil, wird content mit Nothing deklariert. Nothing.ToString ergibt einen Fehler.

    [code]Public Shared Function GetUrlResponse(ByVal url As String,
    ByVal username As String, ByVal password As String) As String
    Dim content As String = „“

    Dim webRequest As Net.WebRequest = webRequest.Create(url)

    If username Is Nothing OrElse password Is Nothing Then
    Dim networkCredential As New Net.NetworkCredential(username, password)
    webRequest.PreAuthenticate = True
    webRequest.Credentials = networkCredential
    End If

    Dim webResponse As Net.WebResponse = Nothing

    Try
    webResponse = webRequest.GetResponse()
    Catch ex As Exception
    End Try

    If webResponse IsNot Nothing Then
    Dim sr As New IO.StreamReader(webResponse.GetResponseStream(),
    System.Text.Encoding.ASCII)
    content = sr.ReadToEnd()
    End If
    Return content
    End Function[/code]
    Timo

  3. Liege ich jetzt falsch, oder muss es nicht heissen
    [code]If username [b]IsNot[/b] Nothing OrElse password [b]IsNot[/b] Nothing Then[/code]
    (in Zeile 7). Genau andersrum. So klappts jedenfalls bei mir.