HttpWebRequest Tutorial (für Anfänger)

    • VB.NET

    Es gibt 31 Antworten in diesem Thema. Der letzte Beitrag () ist von Pidgin.

      HttpWebRequest Tutorial (für Anfänger)

      Hallo leute,

      Da sich einige leute so eine Tutorial gewünscht haben. :)

      Heute möchte ich euch zeigen wie man sich auf einer Seite mit der HttpWebRequest Klasse einloggt
      (in diesem fall vb-community.eu), und somit guckt ob der Login für die Seite Funktioniert.

      Was wir als erstes brauchen:

      Live HTTP Headers (Download):
      addons.mozilla.org/de/firefox/addon/3829

      Wir gehen als erstes mal auf die Seite www.vb-community.eu, dort sehen wir dann den Link
      „Anmelden“ – Auf diesen link klicken wir einmal mit dem Mausrad drauf.

      Wenn ihr da drauf geklickt habt seht ihr den Login für vb-community!

      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Aber bevor wir weiter machen starten wir erst mal LiveHttpHeaders!
      Dazu geht ihr unter Firefox > Extras > Live http Headers.

      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Dabei müsst ihr darauf achten das bei Mitschneiden der Haken gesetzt ist.

      dead links/404 an dieser Stelle entfernt ~VaporiZed

      So jetzt habt ihr die Grundlage um den Post mit zuschneiden. Aber ihr müsst Live http Headers geöffnet lassen!
      Jetzt braucht ihr einen Account zu der Seite dessen du Checken willst.
      Ihr gebt die Account Daten ein und drückt Anmelden.
      (Bitte achtet darauf dass Live http Header offen ist!)

      Jetzt hat euer Live http Headers natürlich den Post mit geschnitten, und das sieht dann so aus:

      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Hier geht ihr auf „Alles Speichern“ und Speichert es, somit wir jetzt zum Code kommen ;) Als erstes Importieren wir:

      VB.NET-Quellcode

      1. Imports System.IO, System.Net, System.Text


      Jetzt Deklarieren wir erstmal 2 Variablen, nämlich User & pwd. (im Form_Load)

      VB.NET-Quellcode

      1. Dim User = "", Pwd = ""


      Als nächtest kommt der Teil des Codes wo wir angeben auf welcher Webseite wir uns einloggen wollen.

      VB.NET-Quellcode

      1. Dim Request As HttpWebRequest = CType(WebRequest.Create(""), HttpWebRequest)


      machen wir zu:

      VB.NET-Quellcode

      1. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.vb-community.eu/index.php?form=UserLogin"), HttpWebRequest)


      Da das die Url ist unter der mann sich einloggen kann.
      Die Url Findet mann heraus indem man rechtsklick auf „Anmelden“ macht und dann auf link-adresse kopieren!

      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Jetzt fügt ihr noch Method & Content Type hinzu:

      VB.NET-Quellcode

      1. Request.Method = "POST" Request.ContentType = "application/x-www-form-urlencoded"


      Status:
      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Nun fügen wir noch mal einen dicken Blog ein.

      VB.NET-Quellcode

      1. Dim Post As String = "" Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post) Request.ContentLength = byteArray.Length Dim DataStream As Stream = Request.GetRequestStream() DataStream.Write(byteArray, 0, byteArray.Length) DataStream.Close()


      In der Variable „Post“ steht der Post, jetzt öffnet ihr die Textdatei die ihr vorher
      Gespeichert habt, und guckt mittels Strg+f wo euer Passwort in der Textdatei steht.

      Bei mir ist es die reihe unter: „Content-Length:“.

      Mein Code ist:

      VB.NET-Quellcode

      1. loginUsername=MEINBENUTZERNAME&loginPassword=MEINPASSWORT&useCookies=1&url=


      Da wo MEINBENUTZERNAME und MEINPASSWORT steht, da sind normalerweise eure Account Daten!

      Diesen Code ändern wir jetzt so dass wir nachher die Account Daten in der Variable User & pwd bestimmen können.

      Nämlich in:

      VB.NET-Quellcode

      1. loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url==


      Unser Code wo wir den POST festlegen sieht dann so aus:

      VB.NET-Quellcode

      1. Dim Post As String = "loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url="


      Jetzt fügen wir nochmal einen dicken blog ein:

      VB.NET-Quellcode

      1. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
      2. Request.ContentLength = byteArray.Length
      3. Dim DataStream As Stream = Request.GetRequestStream()
      4. DataStream.Write(byteArray, 0, byteArray.Length)
      5. DataStream.Close()


      Den Quelltext holen wir uns mit:

      VB.NET-Quellcode

      1. Dim Response As HttpWebResponse = Request.GetResponse()
      2. DataStream = Response.GetResponseStream()
      3. Dim reader As New StreamReader(DataStream)
      4. Dim ServerResponse As String = reader.ReadToEnd()
      5. reader.Close()
      6. DataStream.Close()
      7. Response.Close()


      Dann müsste euer Code so aussehen:
      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Und jetzt kommen wir endlich zu der schon oben angesprochenen Abfrage ob ein Bestimmtes Word auf der Seite nach dem Einloggen ist. Und da wir uns ja den Quelltext schon geholt habe können wir das auch ganz Bequem via InStr prüfen.

      Unser Code lautet daher:

      VB.NET-Quellcode

      1. If InStr(ServerResponse, "Sie wurden erfolgreich angemeldet.") Then
      2. MessageBox.Show("Login OK")
      3. Else
      4. MessageBox.Show("Login nicht OK")
      5. End If


      Das: „Sie wurden erfolgreich angemeldet.“ Nehme ich aus dem grund weil die nächste seite die nach dem einloggen kommt diese ist:
      dead links/404 an dieser Stelle entfernt ~VaporiZed

      Euer Code ganz zum schluss sollte dann so aussehen:

      VB.NET-Quellcode

      1. Imports System.IO, System.Net, System.Text
      2. Public Class Form1
      3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      4. Dim User = "igoe", Pwd = ""
      5. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.vb-community.eu/index.php?form=UserLogin"), HttpWebRequest)
      6. Request.Method = "POST"
      7. Request.ContentType = "application/x-www-form-urlencoded"
      8. Dim Post As String = "loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url="
      9. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
      10. Request.ContentLength = byteArray.Length
      11. Dim DataStream As Stream = Request.GetRequestStream()
      12. DataStream.Write(byteArray, 0, byteArray.Length)
      13. DataStream.Close()
      14. Dim Response As HttpWebResponse = Request.GetResponse()
      15. DataStream = Response.GetResponseStream()
      16. Dim reader As New StreamReader(DataStream)
      17. Dim ServerResponse As String = reader.ReadToEnd()
      18. reader.Close()
      19. DataStream.Close()
      20. Response.Close()
      21. If InStr(ServerResponse, "Sie wurden erfolgreich angemeldet.") Then
      22. MessageBox.Show("Login OK")
      23. Else
      24. MessageBox.Show("Login nicht OK")
      25. End If
      26. End Sub
      27. End Class


      Wenn ihr das Programm jetzt Startet dann bekommt ihr gesagt ob eure Daten richtig sind!

      Ich hoffe ihr habt das Tutorial verstanden, und ich konnte euch alles gut übermitteln.
      Wenn euch das Tutorial gefallen hat dann gebt mir dafür einfach ein thx!

      Lg, igoe

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „VaporiZed“ ()

      Hallo,

      danke für das klasse tutorial nun möchte ich gerne wissen wie ich es für steam machen doch leider ohne erfolg kannst du mir vlt. weiterhelfen muss ich was bestimmtes beachten wen ich das mit andren pages mache?. So sieht mein code aus:

      VB.NET-Quellcode

      1. Imports System.IO, System.Net, System.Text
      2. Public Class frmMain
      3. Private Sub cmdCheck_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCheck.Click
      4. Dim User = txtUser.Text, Pwd = txtPass.Text
      5. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://steamcommunity.com"), HttpWebRequest)
      6. Request.Method = "POST"
      7. Request.ContentType = "application/x-www-form-urlencoded"
      8. Dim Post As String = "steamAccountName=" & User & "&steamPassword=" & Pwd
      9. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
      10. Request.ContentLength = byteArray.Length
      11. Dim DataStream As Stream = Request.GetRequestStream()
      12. DataStream.Write(byteArray, 0, byteArray.Length)
      13. DataStream.Close()
      14. Dim Response As HttpWebResponse = Request.GetResponse()
      15. DataStream = Response.GetResponseStream()
      16. Dim reader As New StreamReader(DataStream)
      17. Dim ServerResponse As String = reader.ReadToEnd()
      18. reader.Close()
      19. DataStream.Close()
      20. Response.Close()
      21. If InStr(ServerResponse, "Angemeldet als") Then
      22. MsgBox("Sie haben sich erfolgreich eingelogt", MsgBoxStyle.Information, "Information")
      23. Else
      24. MsgBox("Login fehlgeschlagen. Bitte versuchen sie es erneut und überprüfen ihre eingabe", MsgBoxStyle.Critical, "Fehler")
      25. End If
      26. End Sub
      27. End Class

      Hier mal ein kleiner screen:

      CodeTags gesetzt
      dead links/404 an dieser Stelle entfernt
      ~VaporiZed


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

      vb-paradise.de/user/4448-igoe/Hi igoe !

      Erstmal wollte ich mich bedanken für das super tut !

      Allerdings kann man das Programm dazu bringen, "Login OK !" anzuzeigen, obwohl der Acc falsch ist...
      Wenn man als User "Sie wurden erfolgreich angemeldet." eingibt findet man im Quelltext die Zeile:
      Der Benutzername »"Sie wurden erfolgreich angemeldet."« konnte nicht gefunden werden.
      D.h. InStr wir als Rückgabe True ergeben. :)
      Ist nicht böse gemeint finds nur witzig...

      Trozdem ein SUPER Tipp ... Ich suche schon länger nach solch einer Mothode, ohne das WebBrowser-Element !

      Mfg Howie :)

      die Farbe Rot ist der Moderation vorbehalten und wurde ersetzt ~VaporiZed

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

      Hab das mit Ogame versucht aber bei Textbox3.Text = ServerResponse kommt nur son javascript text

      HTML-Quellcode

      1. <script>document.location.href='http://ogame.de'</script>



      Check das mit den Cookies nicht

      der http header von ogame ist

      Quellcode

      1. http://barym.ogame.de/game/reg/login2.php
      2. POST /game/reg/login2.php HTTP/1.1
      3. Host: barym.ogame.de
      4. User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7
      5. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      6. Accept-Language: de-de,de;q=0.8,en-us;q=0.5,en;q=0.3
      7. Accept-Encoding: gzip,deflate
      8. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
      9. Keep-Alive: 300
      10. Connection: keep-alive
      11. Referer: http://ogame.de/?error=2
      12. Cookie: vc1=1266328286; vc2=1266414330; prsess_148280=a83a6e342d459634ef08391dd40e3ca5; login_148280=U_de102:XXXXX:6d28f3397dc75ec21d527ad4ceff2a33; mbox=check#true#1266164424|session#1266164363735-349641#1266166224|PC#1266164363735-349641.15#1267373964; __utma=264069843.154346389.1266164364.1266164364.1266164364.1; __utmz=264069843.1266164364.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); PHPSESSID=ff173b6361dcab0ac565d1ca8904072d
      13. Content-Type: application/x-www-form-urlencoded
      14. Content-Length: 92
      15. uni_id=101&v=2&is_utf8=0&uni_url=barym.ogame.de&login=XXXXXX&pass=XXXXXX&submitInput=Login
      16. HTTP/1.1 302 Found
      17. Date: Tue, 16 Feb 2010 13:45:44 GMT
      18. Server: Apache
      19. Expires: Thu, 19 Nov 1981 08:52:00 GMT
      20. Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
      21. Pragma: no-cache
      22. Set-Cookie: prsess_148280=18a1c9d25782b040152324820eb63d7c; expires=Wed, 17-Feb-2010 13:45:44 GMT; path=/
      23. Set-Cookie: login_148280=U_de102:CannaP:6d28f3397dc75ec21d527ad4ceff2a33; expires=Wed, 17-Feb-2010 13:45:44 GMT; path=/
      24. Location: /game/index.php?page=overview&session=29583a4851a3&lgn=1
      25. Vary: Accept-Encoding
      26. Content-Encoding: gzip
      27. Content-Length: 20
      28. Connection: close
      29. Content-Type: text/html; charset=utf-8


      VB.NET-Quellcode

      1. Dim User = "xxx", Pwd = "xxx"
      2. Dim cookies As CookieContainer
      3. Dim Request As HttpWebRequest = CType(WebRequest.Create("http://barym.ogame.de/game/reg/login2.php"), HttpWebRequest)
      4. Request.Method = "POST"
      5. Request.ContentType = "application/x-www-form-urlencoded"
      6. Request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7"
      7. Request.CookieContainer = cookies
      8. Dim Post As String = " uni_id=101&v=2&is_utf8=0&uni_url=barym.ogame.de&login=" & User & "&pass=" & Pwd & "&submitInput=Login"
      9. Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
      10. Request.ContentLength = byteArray.Length
      11. Dim DataStream As Stream = Request.GetRequestStream()
      12. DataStream.Write(byteArray, 0, byteArray.Length)
      13. DataStream.Close()
      14. Dim Response As HttpWebResponse = Request.GetResponse()
      15. DataStream = Response.GetResponseStream()
      16. Dim reader As New StreamReader(DataStream)
      17. Dim ServerResponse As String = reader.ReadToEnd()
      18. reader.Close()
      19. DataStream.Close()
      20. Response.Close()
      21. TextBox3.Text = ServerResponse


      /ee Problem geläst

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

      Man du musst jetzt nicht überall 10000 mal dein Problem schildern, im Forum schauen überall die selben Leute nach mensch.

      Zudem wenn dir geholfen werden soll zeige mal Code her und kein gegürtzen oder so, Username und PW kannste ja zensieren.
      Haste auch den Header mitgeschnitten um zu schauen welche Variablen alle übermittelt werden müssen?
      Hier haste es ;) :

      VB.NET-Quellcode

      1. Public Class Form1
      2. Private Sub WebBrowser1_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
      3. 'Nickname Eingabe
      4. WebBrowser1.Document.GetElementById("Login_email").InnerText = "NICKNAME"
      5. 'Passwort Eingabe
      6. WebBrowser1.Document.GetElementById("Login_password").InnerText = "PASSWORT"
      7. 'Sitzung sicher Checkbox checken
      8. WebBrowser1.Document.GetElementById("Login_remind").SetAttribute("checked", "checked")
      9. 'Eingeloggt bleiben Checkbox checken
      10. WebBrowser1.Document.GetElementById("Login-Remind-Label").SetAttribute("checked", "checked")
      11. 'Button klicken
      12. WebBrowser1.Document.Forms(0).InvokeMember("submit")
      13. End Sub
      14. End Class
      Hallo erstmal und THX an igoe für die ausführliche Erläuterung :)

      Prinzipiell ist das auch alles klar und nachvollziehbar, mein Problem ist aber folgendes:
      Ich nutze VB (6.5) unter Excel 2007 und manche Ausdrücke des von Dir geposteten Codes "frisst" das VB da net (fängt schon bei der Variablendeklaration an, bei der ich nicht in einer Zeile eine Variable deklarieren und ihr einen Wert zuweisen kann. Statt

      Dim user = "igoe"

      müßte ich z.B.

      Dim user as string
      user = "igoe"

      verwenden.)
      Das wäre ja kein großer Beinbruch aber bei Zeilen wie

      DataStream.Write(byteArray, 0, byteArray.Length)

      streckt mein VB dann vollends die Flügel ;(

      Wäre nett, wenn mir da jemand helfen könnte, oder einen Tip geben könnte wo ich Hilfe finden kann.
      Mir gehts also darum, den Code von igoe "excel-verständlich" zu machen ^^

      thx in advance
      Casi

      VB.NET-Quellcode

      1. _HttpWebRequest.Headers("userAgent") = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.2; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0)"


      Mfg Kevin.
      Hallo Leute und zwar habe ich folgendes Problem,
      ich habe es auch mit http headers gemacht, weiß nur nicht woran das liegt das ich mich nicht Einloggen kann. :(


      Das ist die Seite wo ich mich einloggen möchte:

      http://www.mafia-imperium.de


      Hier der Code:

      VB.NET-Quellcode

      1. Imports System.IO, System.Net, System.Text
      2. Public Class Form1
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim User = (TextBox1.Text), Pwd = (TextBox2.Text) Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.meinemafia.de/MafiaKadaboom/login"), HttpWebRequest) Request.Method = "POST" Request.ContentType = "application/x-www-form-urlencoded" Dim Post As String = "username=" & User & "password=" & Pwd & "&submit=Anmelden" Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post) Request.ContentLength = byteArray.Length Dim DataStream As Stream = Request.GetRequestStream() DataStream.Write(byteArray, 0, byteArray.Length) DataStream.Close()
      4. Dim Response As HttpWebResponse = Request.GetResponse() DataStream = Response.GetResponseStream() Dim reader As New StreamReader(DataStream) Dim ServerResponse As String = reader.ReadToEnd() reader.Close() DataStream.Close() Response.Close()
      5. If InStr(ServerResponse, "Sie wurden erfolgreich angemeldet.") Then MessageBox.Show("Login OK") Else MessageBox.Show("Login nicht OK") End If End SubEnd Class

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

      wenn ich das so mache wie oben im tut geschrieben, kommt bei mir "Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Ungültiger URI: Das URI-Format konnte nicht bestimmt werden..". wie bekomm das weg? was is falsch?
      @dave: dafür müsste man den URL sehen den du verwendest ;)