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):
https://addons.mozilla.org/de/firefox/addon/3829
Ihr geht erstmal auf die Seite
www.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
|
1
|
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:
|
Visual Basic Quellcode
|
1
|
System.Net , System.IO , System.Text.RegularExpressions
|
Jetzt deklariert ihr zuerst einmal unter Public Class Form1 ( sprich global ) den Cookiecontainer.
Euer code sollte jetzt so aussehen:
|
Visual Basic Quellcode
|
1
2
3
|
Imports System.Net, System.IO, System.Text.RegularExpressions
Public Class Form1
Private Containa = New Cookiecontainer
|
Jetzt braucht ihr einen Webclient, der euch den Quelltext runterlädt , dann muss man den Formkey & Iv rausfischen.Das geht per Regex.
|
Visual Basic Quellcode
|
1
2
3
|
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.
|
Visual Basic Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
|
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:
|
Visual Basic Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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:
|
Visual Basic Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
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:
|
Visual Basic Quellcode
|
1
|
R.ServicePoint.Expect100Continue = False
|
Ich hoffe das hilft euch.
Kritik / Fragen ? bitte Posten.
Mfg Kevin.