HTTPRequest - POST Requests im Webbrowser überwachen

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Sk1p.

    HTTPRequest - POST Requests im Webbrowser überwachen

    Hallo,

    ich möchte es irgendwie hinkriegen, dass ich die POST Requests, die im Webbrowsercontrol übertragen werden irgendwie speichern und auswerten kann.
    Nachdem ich recherchiert habe, habe ich herausgefunden, dass man dazu SHDocVw verwenden muss um dann mit dem Event BeforeNavigate2 zu arbeiten.

    Dies sollte irgendwie über diesen Code funktionieren:

    VB.NET-Quellcode

    1. Imports SHDocVw 'davor Verweis auf shdocvw.dll aus system32 hinzufügen
    2. Public Class Form1
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. Dim ie = DirectCast(WebBrowser1.ActiveXInstance, SHDocVw.InternetExplorer)
    5. AddHandler ie.BeforeNavigate2, AddressOf WebBrowser_BeforeNavigate2
    6. End Sub
    7. ' Eventhandler für BeforeNavigate
    8. Private Sub IE_BeforeNavigate2(ByVal pDisp As Object, ByRef URL As Object, ByRef Flags As Object, ByRef TargetFrameName As Object, ByRef PostData As Object, ByRef Headers As Object, ByRef Cancel As Boolean)
    9. Dim PostDataText = System.Text.Encoding.ASCII.GetString(PostData)
    10. RichTextBox1.Text = PostDataText
    11. End Sub
    12. End Class


    Ein ähnlicher ansatz sieht so aus mit einem seperatem Fenster:

    VB.NET-Quellcode

    1. Imports SHDocVw
    2. Public Class Form1
    3. ' der Original Windows IE
    4. Dim WithEvents IE As New SHDocVw.InternetExplorer
    5. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    6. IE.Visible = True
    7. IE.Navigate("http://www.google.de")
    8. End Sub
    9. ' Eventhandler für BeforeNavigate
    10. Private Sub IE_BeforeNavigate2(ByVal pDisp As Object, ByRef URL As Object, ByRef Flags As Object, ByRef TargetFrameName As Object, ByRef PostData As Object, ByRef Headers As Object, ByRef Cancel As Boolean) Handles IE.BeforeNavigate2
    11. MessageBox.Show("IE BeforeNavigate fired")
    12. End Sub
    13. End Class


    Kann mir einer erläutern wie ich mit Hilfe dieses Codes in meine Form den Webbrowser einfügen kann, von dem ich Postdata überwache und in einer Richtextbox ausgebe? Oder mit irgendwelche Tipps geben

    Danke für jede Hilfe..

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

    Ich weiß schon, dass es HTTP Analyzer gibt. Man kann auch die Request im Browser sehen wenn man da die Web-Entwickler Tools verwendet (Chrome, IE9, Firefox4).
    Aber mir gehts darum, dass der selbständig eine Website aufruft und die getätigten Post-Requests rausfischt, (die dann ändert und absendet)..
    Aber so wie ich sehe ist es nicht einfach so ein HTTP Analyzer mit VB2010 zu machen. ( Wenn er HTTP-Requests, die von allen Browser logt und ich die dann filtern kann, hab ich auch kein Problem)
    dass der selbständig eine Website aufruft und die getätigten Post-Requests rausfischt, (die dann ändert und absendet)
    Ich wüsste nicht, wie du ein WebBrowser-Objekt dazu bringen kannst, PostRequests zu versenden, die er nicht selbst erzeugt hat.
    Da musst du vermutlich die HttpWebRequest-Klasse dafür verwenden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Die Request versende ich ja dann nicht mit dem WebBrowser-Objekt. Das mach ich ganz normal. Mir gehts nur um das abgreifen von PostRequests mit dem WebBrowser..

    Die Frage ist ob mir jemand hier erklären kann wie es mit dem BeforeNavigate funktioniert..

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

    die Session ist nicht wichtig nur das wenn vom Webbrowser PostRequest ausgehen, ich die speichern kann

    Nur zur näheren Erläuterung:
    Ich möchte mit dem WebBrowser ein Website mit einem Flash-Objekt aufrufen. Wenn man beim FlashObjekt eine bestimmte Aktion macht, wird ein PostRequest mit einem bestimmten String versendet, welchen ich abspeichern will

    Dies verarbeitet das Programm und sendet später einen veränderten PostRequest (mit einer neuen Session)

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

    Mir ist immer noch nicht klar, weshalb du das innerhalb des Browsers machen willst.
    Wenn es doch auf die Session nicht ankommt, und du nur wissen willst, welche Post-Parameter vorhanden sind, kannst du auch einen Analyzer damit beauftragen.

    Der Post-Request wird vom WebBrowser-Object nicht selbst erzeugt, sondern er verwendet dafür die darunterliegende WebRequest-Klasse (die er natürlich entsprechend füttert).

    Wen du die Daten in einer anderen Session verwenden willst, musst du sowieso die sessionspezifischen Parameter in der Response selbst auswerten und den PostRequest entsprechend aufbereiten.

    Vielleicht habe ich auch dein Problem nicht verstanden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Sorry, hab mein Post davor bearbeitet, hast du wahrscheinlich nicht gemerkt.
    Nochmal:
    Der Benutzer soll eine Website mit einem FLASH Objekt aufrufen. In diesem Flash-Objekt macht er irgendwelche Aktionen. Irgendwann drückt er auf nen Button in diesem Flash-Objekt. Daraufhin sendet der Browser einen Text der durch dieses Flash Objekt generiert wurde [Also das FlashObjekt selbst versendet es]an nen Server über ein PostRequest. Diesen PostRequest möchte ich abgreifen.
    Danach verarbeite ich ihn und kann ihn mit ner neuen Session ohne dass ich nen Webbrowser brauche verschicken.

    Und einen Analyzer kann ich dazu nicht nehmen, weil ja das Programm Jeder benutzen soll und es automatisch gehen soll, statt das der Benutzer alleine im Analyzer nach dem Request sucht..

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

    Der Klick auf ein Flashelement ist üblicherweise ein GET-Request und kein POST.

    Wenn es dir um ein das reine Triggern eines anderen Prozesses geht, also um die Info, wann was geklickt wurde, kriegst du das im Navigating-Event mit.
    Dort kriegst du auch die URL mit, zu der navigiert wurde.

    Wenn es tatsächlich ein POST ist:
    Wenn es dir um den Inhalt des Requests geht, gibt es zwei Möglichkeiten:
    1) Der Inhalt ist konstant, dann kannst du ihn einmalig mit dem Analyzer auslesen und in deinem Programm verwenden.
    2) Der Inhalt ist Session-abhängig (und das sind POST-Requests im allgemeinen), dann kannst du ihn in einer anderen Session auch nicht verwenden.

    Ein POST ist üblicherweise die Antwort auf eine ganz bestimmte Anfrage.
    Und dazu muss der Session-Context stimmen, damit der POST vom Server auch zugeordnet werden kann.
    Du musst also in deinem Programm erstmal denselben Context wie in deinem Browser aufbauen, um einen POST erfolgreich loszuwerden.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich sehe schon, dass mein Vorhaben schwierig umzusetzen ist..
    Aber nochmal noch genauer um es klarzustellen:
    Es ist ein Post-Request und zwar 100%
    Dieser Post-Request geht vom FlashObjekt aus:
    Dazu wird einem upload.php script ein gewisser Text mit dem PostRequest übergeben
    Der PostRequest ist zwar Sessionabhängig aber im Request wird immer die UserID und Passwort die immer gleich bleiben (Login) übertragen. Somit gibt es kein Problem einen zweite Post-Request mit veränderten Daten zu versenden. Denn ich mach einfach einen neuen Request an die upload.php und übertrage mit ihm die UserID und Passwort.

    Wie du es dir vorstellen könntest ganz einfach formuliert:
    Es gibt ein FlashSpiel an dem du dich Einloggen musst. Danach spielst du es am Ende wird ein PostRequest versendet mit deinem HighScore an die upload.php.
    Jetzt stell dir vor ich will diesen PostRequest speichern und dran eine Null anhängen und danach als einen neuen PostRequest an die upload.php versenden mit Vb.net. Wie kann ich das umsetzen?