Problem beim Download des Quelltextes mit HttpWebRequest

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Jings.

    Problem beim Download des Quelltextes mit HttpWebRequest

    Tag zusammen,

    ich hab nach langer Zeit mal wieder angefangen bissl mit VB.Net rumzuspielen. Nun steh ich nach langer Zeit des Gutgehends vor dem ersten Problem.

    Ich soll für nen Kumpel einen NFO Getter schreiben.
    Wenn ich mit dem Firefox oder IE auf die Seite gehe und mir den Quelltext anzeigen lasse, bekomme ich alles angezeigt.

    Wenn ich es jetzt allerdings per HttpWebRequest den Quelltext von der Seite lade (HttpWebRequest, weil vorher ne Suche gestartet wird) fehlt mir immer der wichtige Teil...

    Habs auch schon versucht, dem Quelltext auszulesen anhand des Webbrowser Controls. Aber dieser liefert mit das gleiche Ergebnis ohne die Zeilen, die für mich wichtig sind.

    Da ich nicht weiß, ob ich die Links hier posten darf, hab ich diese rausgelassen, auch wenn das dem Verständnis meiner Frage schadet. Falls die Links jedoch erlaubt sind, gebt mir bescheid und ich liefer diese nach.

    LG
    Jings
    Liefer per Edit nach welche Seite Du auslesen willst und an welchen Informationen Du interessiert bist, genauso wie Du mit Deiner "Suche" vorgehst.Kann mehrere Ursachen haben (Ajax, Frames) und wir können Dir besser helfen wenn wir die Fakten kennen.
    evtl. werden diese Infos nachgeladen und der FF setzt diese in den Quellcode, wenn es beim IE geht sollte es beim WebBrowserControl eigentlich ebenfalls funktionieren, da es eigt. dasselbe ist :P Evtl. wäre es gut zu wissen, was das für Informationen sind? Sind diese auch direkt Sichtbar(also im WebBrowser...)
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Also Seite ist beispielweise diese hier: xrel.to/movie-nfo/229970/The-E…an-READ-NFO-XViD-AOE.html

    Suche wird so gelöst:

    VB.NET-Quellcode

    1. Dim R As HttpWebRequest = HttpWebRequest.Create("http://www.xrel.to/search.html")
    2. R.Method = "POST"
    3. R.CookieContainer = Containa
    4. R.Host = "www.xrel.to"
    5. R.Headers("useragent") = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
    6. R.ContentType = "application/x-www-form-urlencoded"
    7. Dim Post As String = "xrel_search_query=" & TextBox1.Text & "&mode=full&x=4&y=6"
    8. R.ContentLength = Post.Length
    9. R.ServicePoint.Expect100Continue = False
    10. Dim Writer As New StreamWriter(R.GetRequestStream(), System.Text.Encoding.ASCII) ' Erstellt einen Streamwriter der in den Stream schreibt, mit dem Textencoding Ascii.
    11. Writer.Write(Post) ' Hiermit wird euer Post in den Stream geschrieben.
    12. Writer.Close() ' Streamwriter schließen , damit er nicht unendlich weiterschreibt.
    13. Dim Reader As New StreamReader(R.GetResponse.GetResponseStream()) ' Erstellt einen Streamreader der euren Stream ausliest.
    14. Dim Response As String = Reader.ReadToEnd ' Der Streamreader soll den Stream bis zum Ende auslesen und zwar in die String Variable Response.
    15. Reader.Close()


    Ich kann mir auch schon denken wodran es liegt. Wenn ich mit FF oder IE auf die Seite gehe, steht oben unter dem RLS-Titel "Bildanzeige" und "Textanzeige", was mit im Webbrowser Control nicht angezeigt wird. Ist halt Javascript und da denke ich liegt das Problem.

    Nur warum ist im IE der Quelltext komplett auch mit Textanzeige und im Webbrowser-Control nicht?

    Denn die Textanzeige (also das was zwischen <pre> und </pre> liegt) ist für mich das relevante der Seite.

    Danke schonmal euch beiden für eure Hilfe =)

    LG
    Jings
    Das ist der Code der Suche , wie ist der Code Deines httpRequestes wenn Du die Zielseite xrel.to/movie-nfo/229970/The-E…an-READ-NFO-XViD-AOE.html aufrufst und ausliest.

    Obwohl ein Ajax-Modul angesprochen wird ist der <pre> ...</pre> Teil im Quellcoede vorhanden , genausowenig sind Frames vorhanden. Also sollte auch der normale httpRequest dden gleichen Inhalt vorweisen.

    Schreib doch mal den Ergebnisstring Deiner response in eine TextDatei, dann kannst Du dir das genauer anschauen.
    Hier habe ich dir mal die Response hochgeladen, die ich mit httpwebrequest (der der oben steht) rausbekomme.

    nopaste.info/a9face4ada.html
    (Das Ergebnis bekomme ich auch wenn ich mit dem Webbrowser-Control probiere)

    Ist leider ohne den <pre> Teil.

    Es müsste ja eigentlich funktionieren, aber tuts nicht. Und ich wüsste gern warum...

    Edit: Dazu sei noch gesagt, dass wenn ich die Seite mit dem Webbrowsercontrol aufrufe, wird mir die Option "Textanzeige" garnicht angezeigt. Ich denke deswegen wirds auch im Quelltext nicht angezeigt. Da es Javascript ist, kann ich mir nur vorstellen, dass ich ne veralterte InternetExplorer.dll hab oder Javascript nicht erlaubt wird beim Webbrowsercontrol.
    Jedoch funktioniert es im installierten IE wunderbar... Ich weiss echt nicht mehr weiter....

    Danke nochmal an die Hilfe hier :)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Jings“ ()

    Das hier bringt das gleiche Resultat wie die Seite im Firefox:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim WithEvents wb As New WebBrowser
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. ' wb auf Form
    5. wb.Dock = DockStyle.Fill
    6. wb.ScriptErrorsSuppressed = True
    7. Me.Controls.Add(wb)
    8. wb.Navigate("http://www.xrel.to/movie-nfo/229970/The-Expendables-R5-LD-German-READ-NFO-XViD-AOE.html")
    9. ' auf Browser warten
    10. While wb.ReadyState <> WebBrowserReadyState.Complete
    11. Application.DoEvents()
    12. End While
    13. ' in datei scghreiben
    14. Dim sw As New System.IO.StreamWriter("d:\WebSeite.txt")
    15. sw.WriteLine(wb.Document.Body.OuterHtml)
    16. sw.Close()
    17. End Sub
    18. End Class

    Allerdings ist der grosse Textblock in der Mitte eine Grafik, wie Du auch bei FF erkennen kannst (rechtsclick->Grafik anzeigen)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Kangaroo“ ()

    Das das ne Grafik ist, ist mir selbstverständlich klar.
    Aber im Quellcode vom Firefox ist auch die Textvariante drin und genau die brauch ich und das ist der Teil zwischen den <pre> Tags

    Jetzt weiß ich nicht, ob du mein Edit aus dem Post über dir noch gelesen hast, denn deine Methode funktioniert bei mir auch nicht. Der Teil zwischen den <pre>-Tags wird mir immer noch nicht angezeigt.

    Edit: Dazu sei noch gesagt, dass wenn ich die Seite mit dem Webbrowsercontrol aufrufe, wird mir die Option "Textanzeige" garnicht angezeigt. Ich denke deswegen wirds auch im Quelltext nicht angezeigt. Da es Javascript ist, kann ich mir nur vorstellen, dass ich ne veralterte InternetExplorer.dll hab oder Javascript nicht erlaubt wird beim Webbrowsercontrol.
    Kann es daran liegen, dass ich ne veralterte dll rumfliegen hab? Ich wüsste nicht wodran es sonst liegt. Denn in keinen meiner installierten Browser wird mir die Variante "Textmethode" nicht angezeigt nur im Webbrowser-Control auf meiner Form...
    Ok, habs raus indem ich mal die Header per NetMonitor angezeigt und nachgestellt habe: es liegt an 2 Parametern, UserAgent auf etwas Moderneres und der Referer muss von "www.xrel.to" kommen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Net
    2. Imports System.IO
    3. Public Class Form1
    4. 'Dim WithEvents wb As New WebBrowser
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. ' seite holen
    7. Dim result As String = httpGET(New Uri("http://www.xrel.to/movie-nfo/229970/The-Expendables-R5-LD-German-READ-NFO-XViD-AOE.html"))
    8. If result IsNot Nothing Then
    9. Dim sw As New System.IO.StreamWriter("d:\WebSeite.txt")
    10. sw.WriteLine(result)
    11. sw.Close()
    12. End If
    13. End Sub
    14. Public Function httpGET(ByVal aUri As Uri) As String
    15. Dim response As HttpWebResponse = Nothing
    16. Dim cookieJar As New CookieContainer
    17. Try
    18. ' create the request
    19. Dim request As HttpWebRequest = DirectCast(WebRequest.Create(aUri), HttpWebRequest)
    20. ' --- Configure request ---
    21. '' request.Headers.Add("Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3")
    22. 'request.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7")
    23. ''request.Referer = "http://www.xrel.to/search.html?show_results=8yYd1mb2cP5539711&xrel_search_query=expendables"
    24. request.Referer = "http://www.xrel.to"
    25. request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
    26. 'request.ProtocolVersion = HttpVersion.Version11
    27. 'request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
    28. 'request.ContentType = "application/x-www-form-urlencoded"
    29. 'request.AllowAutoRedirect = True
    30. 'cookieJar.SetCookies(New Uri("http:www.xrel.to"), "ANON_LOCALE=de_DE; nfo_font=2")
    31. 'request.Credentials = CredentialCache.DefaultCredentials
    32. ' Get response
    33. response = DirectCast(request.GetResponse(), HttpWebResponse)
    34. ' Get the response stream into a reader
    35. Dim reader As StreamReader = New StreamReader(response.GetResponseStream())
    36. ' Read the whole contents and return as a string
    37. Dim result As String = reader.ReadToEnd()
    38. ' return
    39. Return result
    40. Catch ex As Exception
    41. If response IsNot Nothing Then response.Close()
    42. Return Nothing
    43. End Try
    44. End Function
    45. End Class