Du bist nicht angemeldet.

Gutelaunetyp

Registrierter Benutzer

  • »Gutelaunetyp« ist männlich
  • »Gutelaunetyp« wurde gesperrt
  • »Gutelaunetyp« ist der Autor dieses Themas

Beiträge: 421

Dabei seit: 26. Dezember 2009

Frühere Benutzernamen: Gutelaunetyp

Hilfreich-Bewertungen: 9

  • Private Nachricht senden

1

Montag, 26. Juli 2010, 11:49

HttpWebRequest Tutorial für Anfänger+Fortgeschrittene

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.

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »Smoove« (18. August 2010, 12:43)


Es haben bereits 8 registrierte Benutzer diesen Beitrag als hilfreich eingestuft.

Benutzer, die diesen Beitrag hilfreich fanden:

nerd777, Wumpel, bammes, bla, epoloarity2k11, X-Zat, HeadShotHarp, tompage