Hallo ,
Daher immer wieder Leute Probleme mit HttpWebRequest haben , möchte ich es den Anfängern und Fortgeschrittenen nochmal näherbringen.
Mir ist bewusst das es bereits ein Tutorial gibt.
In diesem Beispiel werde ich euch zeigen , wie Ihr euch auf der Seite SchülerVz einloggt.
Was ihr natürlich braucht:
Live HTTP Headers (Download):
addons.mozilla.org/de/firefox/addon/3829
Ihr geht erstmal auf die Seite schülervz.net und gebt eure Benutzerdaten ein.
Ihr öffnet LiveHttpHeaders und guckt , ob sich ein Häckchen bei Mitschneiden befindet.
Ihr lasst LiveHttpHeaders offen , und klickt auf den SchülerVz Login Button.
Jetzt solltet ihr das hier in LiveHttpHeaders finden:
Das rote ist die Website die ihr für den HttpWebRequest braucht.
Das blau umrandete , das sind die Informationen für den Request.
Wichtig für den Request ist:
-Ein Cookiecontainer
-Allowautoredirect = true
-Die Methode ( ihr seht POST /Login HTTP/1.1) also ist die Methode POST
-Der Host: secure.schuelervz.net ' Ihr müsst darauf achten , nicht jede Seite braucht den Host d.h. es kann ggf. zu Fehlern führen.
-Der Useragent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
-Der Content-Type : application/x-www-form-urlencoded
-Die Content-Length : Post.length ' sprich genauso lang wie der Post
Natürlich der Post :
In diesem Fall hat man diesen typischen Formkey & einen Iv Key.
Diese 2 Werte, findet ihr indem ihr auf der Seite Strg+U drückt ( um in den Quelltext zu gelangen ) , dann Strg+F und unten links in der Suchleiste Formkey eingibt.
Jetzt gehts mit dem Code los.
Ihr importiert:
Jetzt deklariert ihr zuerst einmal unter Public Class Form1 ( sprich global ) den Cookiecontainer.
Euer code sollte jetzt so aussehen:
Jetzt braucht ihr einen Webclient, der euch den Quelltext runterlädt , dann muss man den Formkey & Iv rausfischen.Das geht per Regex.
Dann erstellt ihr einen Request und gebt ihm die Informationen aus LiveHttpHeaders.
Das Posten & auslesen:
'Jetzt könnt ihr zum Test die Response in eine RichTextBox einfügen.
RichTextBox1.Text = Response
' Ihr solltet jetzt schon eingeloggt sein
Nochmal zum Kontrollieren , euer Code sollte am Ende so aussehen:
Falls ihr bei einem Request den Fehler 417 erhaltet , sollte das hier helfen:
Ich hoffe das hilft euch.
Kritik / Fragen ? bitte Posten.
Mfg Kevin.
Daher immer wieder Leute Probleme mit HttpWebRequest haben , möchte ich es den Anfängern und Fortgeschrittenen nochmal näherbringen.
Mir ist bewusst das es bereits ein Tutorial gibt.
In diesem Beispiel werde ich euch zeigen , wie Ihr euch auf der Seite SchülerVz einloggt.
Was ihr natürlich braucht:
Live HTTP Headers (Download):
addons.mozilla.org/de/firefox/addon/3829
Ihr geht erstmal auf die Seite schülervz.net und gebt eure Benutzerdaten ein.
Ihr öffnet LiveHttpHeaders und guckt , ob sich ein Häckchen bei Mitschneiden befindet.
Ihr lasst LiveHttpHeaders offen , und klickt auf den SchülerVz Login Button.
Jetzt solltet ihr das hier in LiveHttpHeaders finden:
Das rote ist die Website die ihr für den HttpWebRequest braucht.
Das blau umrandete , das sind die Informationen für den Request.
Wichtig für den Request ist:
-Ein Cookiecontainer
-Allowautoredirect = true
-Die Methode ( ihr seht POST /Login HTTP/1.1) also ist die Methode POST
-Der Host: secure.schuelervz.net ' Ihr müsst darauf achten , nicht jede Seite braucht den Host d.h. es kann ggf. zu Fehlern führen.
-Der Useragent: Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
-Der Content-Type : application/x-www-form-urlencoded
-Die Content-Length : Post.length ' sprich genauso lang wie der Post
Natürlich der Post :
HTML-Quellcode
- email=Username%40hotmail.de&password=PASSWORT&ipRestriction=1&login=Einloggen&jsEnabled=true&formkey=bd0c34ba948f40117e0511788e5dfe982951501380a5e463e14616942f9edd59aa1ec4c9a859440312b442b06ee09f4b78856dc0b6be9c83582b8867d4b9ce23b4c6b93da582bd2787025bf3dc4a9ac78f5f1c103349d10fc186595bf9efdf83&iv=d6ae3ad6521c0da45bc0551e75e43040
In diesem Fall hat man diesen typischen Formkey & einen Iv Key.
Diese 2 Werte, findet ihr indem ihr auf der Seite Strg+U drückt ( um in den Quelltext zu gelangen ) , dann Strg+F und unten links in der Suchleiste Formkey eingibt.
Jetzt gehts mit dem Code los.
Ihr importiert:
Jetzt deklariert ihr zuerst einmal unter Public Class Form1 ( sprich global ) den Cookiecontainer.
Euer code sollte jetzt so aussehen:
Jetzt braucht ihr einen Webclient, der euch den Quelltext runterlädt , dann muss man den Formkey & Iv rausfischen.Das geht per Regex.
VB.NET-Quellcode
- Dim Source As String = New WebClient().DownloadString("https://secure.schuelervz.net/Login") ' Downloadet den Quelltext der Seite.
- Dim FormKey As String = Regex.Match(Source, "formkey"" value=""([^""]+)""").Groups(1).Value ' Regex für den Formkey
- Dim Iv As String = Regex.Match(Source, "iv"" value=""([^""]+)""").Groups(1).Value ' Regex für die IV
Dann erstellt ihr einen Request und gebt ihm die Informationen aus LiveHttpHeaders.
VB.NET-Quellcode
- Dim R As HttpWebRequest = HttpWebRequest.Create("https://secure.schuelervz.net/Login") ' Request erstellen
- R.Method = "POST" ' Ihr gebt die Methode an
- R.CookieContainer = Containa ' Hier gebt ihr den Cookiecontainer an
- R.Host = "secure.schuelervz.net" ' Ihr gebt bei dieser Seite den Host an
- R.Headers("useragent") = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8" ' Hier gebt ihr den Useragent an.Nicht nur dieser funktioniert es gibt sehr viele die Ihr angeben könnt.
- R.ContentType = "application/x-www-form-urlencoded" ' Der ContentType , sehr wichtig.
- Dim Post As String = "email=EUREEMAIL%40hotmail.de&password=EUERPASSWORT&ipRestriction=1&login=Einloggen&jsEnabled=true&formkey=" &
- FormKey & "&iv=" & Iv ' Das ist euer Post. Den Formkey & Iv müsst ihr natürlich durch den geregexten ersetzen.
- R.ContentLength = Post.Length ' Die Content Length könnt ihr natürlich erst nach der Post Variable angeben.
Das Posten & auslesen:
VB.NET-Quellcode
- Dim Writer As New StreamWriter(R.GetRequestStream(), System.Text.Encoding.ASCII) ' Erstellt einen Streamwriter der in den Stream schreibt, mit dem Textencoding Ascii.
- Writer.Write(Post) ' Hiermit wird euer Post in den Stream geschrieben.
- Writer.Close() ' Streamwriter schließen , damit er nicht unendlich weiterschreibt.
- Dim Reader As New StreamReader(R.GetResponse.GetResponseStream()) ' Erstellt einen Streamreader der euren Stream ausliest.
- Dim Response As String = Reader.ReadToEnd ' Der Streamreader soll den Stream bis zum Ende auslesen und zwar in die String Variable Response.
- Reader.Close() ' Streamreader wieder schließen , damit er nicht unendlich weiterliest.
- If Response.Contains("Meine Startseite") Then
- MessageBox.Show("Erfolgreich eingeloggt!")
- Else
- MessageBox.Show("Login fehlgeschlagen!")
- End If
'Jetzt könnt ihr zum Test die Response in eine RichTextBox einfügen.
RichTextBox1.Text = Response
' Ihr solltet jetzt schon eingeloggt sein
Nochmal zum Kontrollieren , euer Code sollte am Ende so aussehen:
VB.NET-Quellcode
- Imports System.Net, System.IO, System.Text.RegularExpressions
- Public Class Form1
- Private Containa = New Cookiecontainer
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
- Dim Source As String = New WebClient().DownloadString("https://secure.schuelervz.net/Login")
- Dim FormKey As String = Regex.Match(Source, "formkey"" value=""([^""]+)""").Groups(1).Value
- Dim Iv As String = Regex.Match(Source, "iv"" value=""([^""]+)""").Groups(1).Value
- Dim R As HttpWebRequest = HttpWebRequest.Create("https://secure.schuelervz.net/Login")
- R.Method = "POST"
- R.CookieContainer = Containa
- R.Host = "secure.schuelervz.net"
- R.Headers("useragent") = "Mozilla/5.0 (Windows; U; Windows NT 6.1; de; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8"
- R.ContentType = "application/x-www-form-urlencoded"
- Dim Post As String = "email=EUREEMAIL%40hotmail.de&password=EUERPASSWORT&ipRestriction=1&login=Einloggen&jsEnabled=true&formkey=" &
- FormKey & "&iv=" & Iv
- R.ContentLength = Post.Length
- Dim Writer As New StreamWriter(R.GetRequestStream(), System.Text.Encoding.ASCII)
- Writer.Write(Post)
- Writer.Close()
- Dim Reader As New StreamReader(R.GetResponse.GetResponseStream())
- Dim Response As String = Reader.ReadToEnd
- Reader.Close()
- If Response.Contains("Meine Startseite") Then
- MessageBox.Show("Erfolgreich eingeloggt!")
- Else
- MessageBox.Show("Login fehlgeschlagen!")
- End If
- End Sub
- End Class
Falls ihr bei einem Request den Fehler 417 erhaltet , sollte das hier helfen:
Ich hoffe das hilft euch.
Kritik / Fragen ? bitte Posten.
Mfg Kevin.
Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Smoove“ ()