Feedback

C# - URL per WebRequest auslesen

Veröffentlicht von am 10/23/2006
(4 Bewertungen)
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("\r\n");
    }
    content = contentBuilder.ToString();
 
    return content.ToString();
}
Abgelegt unter WebRequest, URL, auslesen.

4 Kommentare zum Snippet

Bastian Waidelich schrieb am 2/11/2008:
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.

StringBuilder contentBuilder = new StringBuilder();
while (-1 != sr.Peek())
{
contentBuilder.Append(sr.ReadLine());
contentBuilder.Append("\r\n");
}
content = contentBuilder.ToString();


durch


content = sr.ReadToEnd();


ersetzt, werden alle Zeilen eingelesen.
Naja, verdient hab ichs ;)
Timo Boehme schrieb am 3/3/2008:
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.

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

Timo
OriginalAndy schrieb am 4/15/2010:
Liege ich jetzt falsch, oder muss es nicht heissen
If username IsNot Nothing OrElse password IsNot Nothing Then

(in Zeile 7). Genau andersrum. So klappts jedenfalls bei mir.
Manfred Janßen schrieb am 8/10/2010:
Hi,
manchmal wäre es schön, wenn Ihr die using-Direktive angeben würdet, das würde viel Sucherei ersparen.

Gruß
Manfred
 

Logge dich ein, um hier zu kommentieren!