HttpWebRequest Tutorial (Für anfänger)

icemanns

New member
Hi,

hier mal ein Tutorial aus meinem Board, es wurde vom Benutzer "Igoe" geschrieben

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

Was wir als erstes brauchen:

Live HTTP Headers (Download):
https://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!

Loginform.PNG


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

Starten.PNG


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

Haken.PNG


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:

log.PNG


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

[vb]Imports System.IO, System.Net, System.Text[/vb]

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

Code:
Dim User = "", Pwd = ""

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

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

machen wir zu:

Code:
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!

rechtsklick.PNG


Jetzt fügt ihr noch Method & Content Type hinzu:
Code:
Request.Method = "POST"  Request.ContentType = "application/x-www-form-urlencoded"

Status:
Status1.PNG


Nun fügen wir noch mal einen dicken Blog ein.
Code:
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:
Code:
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:
Code:
loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url==

Unser Code wo wir den POST festlegen sieht dann so aus:
Code:
Dim Post As String = "loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url="

Jetzt fügen wir nochmal einen dicken blog ein:
Code:
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()

Den Quelltext holen wir uns mit:
Code:
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()

Dann müsste euer Code so aussehen:
Status2.PNG


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:
Code:
If InStr(ServerResponse, "Sie wurden erfolgreich angemeldet.") Then 
    MessageBox.Show("Login OK") 
 Else 
    MessageBox.Show("Login nicht OK")
 End If

Das: „Sie wurden erfolgreich angemeldet.“ Nehme ich aus dem grund weil die nächste seite die nach dem einloggen kommt diese ist:
End.PNG


Euer Code ganz zum schluss sollte dann so aussehen:
Code:
Imports System.IO, System.Net, System.Text

Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim User = "igoe", Pwd = ""
    Dim Request As HttpWebRequest = CType(WebRequest.Create("http://www.vb-community.eu/index.php?form=UserLogin"), HttpWebRequest)
    Request.Method = "POST"
    Request.ContentType = "application/x-www-form-urlencoded"
    Dim Post As String = "loginUsername=" & User & "&loginPassword=" & Pwd & "&useCookies=1&url="
    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()

    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()

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

End Sub
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!

Link zum Original
Benutzerprofil

Gruß

Icemanns
 
Zuletzt bearbeitet:

CDW

Moderator
Mitarbeiter
Ich schalte es mal frei, allerdings wären etwas mehr Infos zum Ersteller gut (Link zum Originalbeitrag, Email/Nick oder was der Ersteller gerne bei "Fremdposts" haben möchte ;) ).
 

icemanns

New member
Ich habe jetzt mal den Originallink und den Link zum Benutzerprofil gepostet.
Habe das eigentlich gemacht weil es nicht rüberkommen sollte, als wäre es Werbung oder so.
 

Pinkywesen

New member
Guten Tag lieber "icemanns",
erstmal Danke dafür das du dieses Tutorial hier veröffentlicht hast! (vb-community.eu ist ja mittlerweile sogar Oflline)

Allerdings habe ich folgendes Problem, wenn das Programm beim Debuggen bei dem Part angelangt ist wo es darum geht den Response zu überprüfen kommt immer dieser Fehler:

Code:
Der Remoteserver hat einen Fehler zurückgegeben: (417) Expectation Failed.

Dieser Tipp von einem anderen Board -->

Code:
Request.ServicePoint.Expect100Continue = False

hat leider auch keine Erfolg gebracht. Ich hoffe du oder jemand anderes hier kann mir weiterhelfen!

~Mfg

Pinkywesen
 
Oben