2 Probleme mit WebRequest bzw. httpwebrequest

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    2 Probleme mit WebRequest bzw. httpwebrequest

    Hallo,

    ich habe aktuell 2 Probleme mit webrequest bzw. hhtpwebrequest. Hintergrund ist das ich mir für verschiene Zwecke Programme geschrieben habe die mir Daten von Internetseiten auslesen bzw aus deren Quelltext. Bisher hatte ich mir den Quelltext mit dem Webbrowser-Steuerelement geholt, was immer problemlos funktionierte.

    Nachdem ich hier im Forum irgendwo mal ein Code-Beispiel für so eine Abfrage mittels httpwebrequest gesehen hatte, habe ich das mal damit ausprobiert, zunächst in einem Test-Prgramm was problemlos ging und dann habe ich die Funktion mal ein eines meiner anderen Programme eingebaut. Bei diesem passiert es jetzt, das die komplette Bedienoberfläche einfriert, das Programm selber arbeitet aber anscheinend im Hintergrund (kann ich darn sehen dass ich mir Ergebnisse in einer Datei speichern lasse und diese auch weiter fortgeschrieben wird.

    Ein anderes Problem was ich lösen will, ist, wenn eine falsche URL eingegeben wird bzw. ich den HTTP-Status-Code abfangen will. Hatte gesehen das das mit Try und Catch irgendwie funktioniert aber wie das genau aussehen muss habe ich keine Ahnung.

    Der von mir bis jetzt verwendete Code:

    VB.NET-Quellcode

    1. 'Quelltext einer Webseite auslesen, keine Kontrolle ob Auslesen erfolgreich (HTML-Status-Code 200)
    2. Public Function Quelltext_auslesen(URL As String) As String
    3. Dim hReq As HttpWebRequest = DirectCast(HttpWebRequest.Create(URL), HttpWebRequest)
    4. Dim hRes As HttpWebResponse = DirectCast(hReq.GetResponse(), HttpWebResponse)
    5. Dim s As Stream = hRes.GetResponseStream()
    6. Dim sR As New StreamReader(s)
    7. Dim webPage As String = sR.ReadToEnd()
    8. sR.Close()
    9. s.Close()
    10. sR = Nothing
    11. s = Nothing
    12. hReq = Nothing
    13. hRes = Nothing
    14. Quelltext_auslesen = webPage
    15. End Function


    Die fragen die ich jetzt hätte wären
    - muss ich noch irgendwas hinzufügen damit die streams beendet/geschlossen werden? hatte schon mal request.abort und .close eingefügt aber hat sich trotzdem nichts geändert.
    - was muss außerdem noch hinzugefügt werden damit ich am Ende der Funktion in einer zusätzlichen Variablen den HHTp Status Code stehen habe? Meine Überlegungen gehen dahin falls die Abfrage nocht erfolgreich war den anstatt den quelltext zurückzugeben.


    Danke für eure Hilfe im voraus.

    harmenrabb schrieb:

    Bei diesem passiert es jetzt, das die komplette Bedienoberfläche einfriert
    Dann solltest Du async arbeiten:

    VB.NET-Quellcode

    1. Private WithEvents client As New System.Net.WebClient
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. client.DownloadStringAsync(New Uri("WHAT_EVER"))
    4. End Sub
    5. Private Sub webClient_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles client.DownloadStringCompleted
    6. Label1.Text = e.Result
    7. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ne, das ist ganz und gar nicht komisch. Das "einfrieren" kommt daher, dass deine Methoden der Reihe nach abgearbeitet werden. Hast du also eine Methode, die 10 Sekunden braucht um abgearbeitet zu werden, reagiert die Form erst wieder, wenn die Methode abgearbeitet wurde. Dein Programm "hängt" also nicht, sondern führt gerade eine Methode aus.

    Das ganze kann verhindert werden, indem man zeitintensive Methoden asynchron laufen lässt.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @harmenrabb Den Post #3 hätte ich auch ignoriert. X(
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!