[VB.NET]Forum Login Problem

04/22/2013 21:06 Requi#1
Ich Hilfe brauche, von euch:

Ich will mich per HttpWebRequest in ein vBulletin Forum einloggen.

Ich komme bis zur Weiterleitung. Wenn ich dann ein GET zur index.php mache, bin ich ausgeloggt.

Kann mir jemand sagen, was falsch sein könnte :confused:

[Only registered and activated users can see links. Click Here To Register...]

MfG
04/22/2013 21:10 dready#2
cookiecontainer sauber gesetzt ?
04/22/2013 21:12 Requi#3
Jap. Benutze eine Klasse, die das erleichtert und bis jetzt hat es immer geklappt.

Nur da geht es nicht ._.
04/22/2013 21:27 dready#4
Am besten, schneid dir mal mit was passiert wenn du von hand einloggst
Danach wenn dein Tool versucht einzuloggen
Dann vergleichen
04/22/2013 21:33 Requi#5
Schon gemacht.

Er sendet als erstes nen POST zum Einloggen.
Dann lädt er per GET ein unnötiges .javascript

Nach ca. 3 Sekunden macht er eine GET Anfrage zur index.php
04/22/2013 22:29 disortion#6
Vielleicht hiflt dir das weiter:[Only registered and activated users can see links. Click Here To Register...]. Und in deinem unnötigen Javascript wird zumindest die Sessionid übergeben.
04/22/2013 23:10 tolio#7
die kristallkugel sagt du musst code posten damit man dir hier wirklich gut helfen kann
04/23/2013 13:19 Requi#8
Du hast auch so eine Kugel?

War am Handy und konnte den Code da nicht schreiben :D

Code:
Imports System.Net
Imports System.Threading

Public Class frmMain
    Public cookie As CookieContainer = New CookieContainer()
    Public content As String
    Private Sub lc_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles lc.Click
        lc.Text = ""
    End Sub

    Private Sub cmdLogin_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdLogin.Click
        content = WebRPOST("http://de.board.bigpoint.com/darkorbit/login.php?do=login", "vb_login_username=" + username.Text + "&vb_login_password=" + pw.Text + "&s=&do=login&vb_login_md5password=&vb_login_md5password_utf=", cookie)
        Thread.Sleep(3000)
        content = WebRGET("http://de.board.bigpoint.com/darkorbit/index.php", cookie)
    End Sub
End Class
HttpWebRequest Klasse:
Code:
Imports System.Net
Imports System.IO
Imports System.Text
Module HTTP

    Public Function WebRPOST(ByVal sUrl As String, ByVal sPost As String, ByVal cookies As CookieContainer) As String
        Try
            Dim nRequest As HttpWebRequest = CType(WebRequest.Create(sUrl), HttpWebRequest)
            nRequest.Method = "POST"
            nRequest.CookieContainer = cookies
            nRequest.ContentType = "application/x-www-form-urlencoded"
            nRequest.Proxy = New WebProxy()
            Dim nbyteArray() As Byte = Encoding.UTF8.GetBytes(sPost)
            nRequest.ContentLength = nbyteArray.Length
            Dim nDataStream As Stream = nRequest.GetRequestStream()
            nDataStream.Write(nbyteArray, 0, nbyteArray.Length)
            nDataStream.Close()
            nRequest.KeepAlive = True
            nRequest.AllowAutoRedirect = True
            nRequest.PreAuthenticate = True

            Dim nResponse As HttpWebResponse = nRequest.GetResponse()
            nDataStream = nResponse.GetResponseStream()
            Dim nreader As New StreamReader(nDataStream)
            Dim nServerResponse As String = nreader.ReadToEnd()
            nreader.Close()
            nDataStream.Close()
            nResponse.Close()

            Return nServerResponse
        Catch ex As Exception
            MsgBox(ex.Message)
            Return Nothing
        End Try

    End Function

    Public Function WebRGET(ByVal sUrl As String, Optional ByRef cookies As CookieContainer = Nothing) As String
        Static cookiecontainer As CookieContainer
        Static cookiecoll As CookieCollection
        Try
            If (cookiecoll Is Nothing) Then
                cookiecoll = New CookieCollection
            End If
            If (cookiecontainer Is Nothing) Then
                cookiecontainer = New CookieContainer
            End If
            Dim req As HttpWebRequest = DirectCast(HttpWebRequest.Create(sUrl), HttpWebRequest)
            req.UserAgent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)"
            req.Method = "GET"
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
            req.Referer = "http://de.board.bigpoint.com/darkorbit/login.php?do=login"
            req.KeepAlive = True
            req.CookieContainer = New CookieContainer()
            req.CookieContainer = cookiecontainer
            req.CookieContainer.Add(cookiecoll)
            req.Proxy = New WebProxy()
            Dim response As HttpWebResponse = DirectCast(req.GetResponse(), HttpWebResponse)
            Dim sr As StreamReader = New StreamReader(response.GetResponseStream())
            Dim html As String = sr.ReadToEnd()
            sr.Close()
            response.Close()
            Return html
        Catch ex As Exception
            MsgBox(ex.Message)
            Return Nothing
        End Try


    End Function
Hoffe, ihr habt eine Lösung^^

Vllt sagt deine Kristallkugel mehr :)

MfG
04/23/2013 19:00 tolio#9
Code:
        Static cookiecontainer As CookieContainer
        Static cookiecoll As CookieCollection
        Try
            If (cookiecoll Is Nothing) Then
                cookiecoll = New CookieCollection
            End If
            If (cookiecontainer Is Nothing) Then
                cookiecontainer = New CookieContainer
            End If
dafuq ist this, wie wärs mit genau so machen wie im post, nämlich einfach den übergebenen cookiecontainer in den request packen

ich gehe sehr stark davon aus das dort der fehler ist.

btw nen sleep bei der nutzung von webrequests ist absolut nicht notwendig
04/23/2013 19:09 disortion#10
Ich wollte nurnoch eben anmerken, dass man vielleicht bei der Bindung der Variablen im String besser kein + nutzen sollte sondern ein &(jedenfalls bei VB.NET).

Bsp "vb_login_username=" + username.Text + "& zu: "vb_login_username=" & username.Text & "&.

Quote:
btw nen sleep bei der nutzung von webrequests ist absolut nicht notwendig
Könnte auch eine Fehlerquelle sein(mach den sleep einfach weg). Die Funktion ist "schlau" genug zu merken wenn er warten muss ^^.
04/23/2013 19:33 Requi#11
Das Sleep hab ich danach rein, als es nicht ging.
Die Klasse von nem Kumpel.

Ich binde Strings immer mit +, da ich demnächst auf C# umsteigen möchte. Daher gewöhne ich mit das + an.
Hab mir sagen lassen, dass & dort ganz böse ist :D
04/23/2013 19:46 disortion#12
Naja und VB wird dir irgendwann dein + um die Ohren hauen. Ich kenne keinen VB-Code im Netz der ein + als Bindung verwendet. In dem jetzigen Beispiel mag es für dich OK sein. Aber ich kriege Bauchschmerzen wenn ich das sehe.

Edit. Ich denke nicht nur ich kriege Bauschmerzen ^^.

Das Sleep hat wie gesagt dort nichts verloren.
04/23/2013 20:02 Requi#13
Dann geh ich das morgen nochmal durch.
Hier kann geclosed werden :)
04/28/2013 11:55 ҳc3ρ0™#14
Also meine Kristallkugel sagt, das die altmodischste Variante vllt doch die beste ist.. :)

Lass mal deinen unnötigen Schnickschnack weg und mach deinen HTTPWebRequest nur mit den Sachen die wirklich notwendig sind :)

Bei mir hats geklappt.

MfG