Avatar billede gartner76 Nybegynder
14. november 2007 - 16:58 Der er 3 kommentarer

Logge ind vha httpWebRequest og redirect

Hej

Jeg er ved at lave et lille program der skal holde øje med status på en webside for mig.

Kort beskrevet er jeg ved at lave et program der logger ind på en webside. Når jeg logger ind på den første side er der i html'en der retuneres et <meta> tag som redirecter mig til en ny side. Den URL kan jeg godt fange men herefter går det galt. Serveren der modtager mit svar sender en advarsel tilbage.

Jeg tror det er mine cookies der er noget galt med men er ikke sikker.
Håber i kan hjæælpe.

Dim UserID As String = "aldius" ' Username
    Dim PWord As String = "password" ' Password
    Dim domain As String = "http://s2.gladiatus.dk/game/index.php?mod=login"
    Dim encoding As New System.Text.ASCIIEncoding
    Dim CookieC As New Net.CookieContainer
    Dim HTML As String
    Dim LoginReq As Net.HttpWebRequest
    Dim SendReq As IO.Stream
    Dim LoginRes As Net.HttpWebResponse
    Dim sReader As IO.StreamReader

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Use the appropriate HTML field names to stuff into the post header
        Dim PostData As String = _
            "user=" & UserID & _
            "&pass=" & PWord ' Note: where txtUName & txtPWord are the field names
        Dim Data() As Byte = encoding.GetBytes(PostData)

        ' Initialise the request
        LoginReq = Net.WebRequest.Create(domain) ' Login location taken from the form action
        With LoginReq
            .KeepAlive = True
            .Method = "POST"           
            .AllowAutoRedirect = False
            .ContentType = "application/x-www-form-urlencoded"
            .ContentLength = Data.Length
            .Referer = "http://s2.gladiatus.dk/game/index.php?mod=login"
            .CookieContainer = CookieC
        End With

        ' Add the POST data
        SendReq = LoginReq.GetRequestStream
        SendReq.Write(Data, 0, Data.Length)
        SendReq.Close()

        ' Obtain the response
        LoginRes = LoginReq.GetResponse()
        sReader = New IO.StreamReader(LoginRes.GetResponseStream)
        HTML = sReader.ReadToEnd

        Dim tstr As String
        tstr = HTML.Substring(HTML.IndexOf("URL"))
        tstr = tstr.Substring(4)
        tstr = "http://s2.gladiatus.dk/game/" + tstr.Substring(0, tstr.IndexOf("><"))

        LoginReq = Net.WebRequest.Create(tstr) ' Login location taken from the form action
        With LoginReq
            .KeepAlive = True
            .Method = "GET"
        End With

        ' Obtain the response
        LoginRes = Nothing
        LoginRes = LoginReq.GetResponse()
        sReader = New IO.StreamReader(LoginRes.GetResponseStream)
        HTML = sReader.ReadToEnd
end sub
Avatar billede gartner76 Nybegynder
14. november 2007 - 17:00 #1
Ps: Jeg har brugt fiddler til at se hvad der blev sendt frem og tilbage og hvordan headere så ud.
Avatar billede arne_v Ekspert
15. november 2007 - 04:07 #2
proev:

        LoginReq = Net.WebRequest.Create(tstr) ' Login location taken from the form action
        With LoginReq
            .KeepAlive = True
            .Method = "GET"
            .CookieContainer = CookieC ' <----------------------
      End With
Avatar billede gartner76 Nybegynder
15. november 2007 - 10:11 #3
Det hjælper desværre ikke.

Jeg kan godt kalde den første side og får html'en tilbage. Der er et metatag som ser ud som følgende:
<meta http-equiv="refresh" content="0; URL=index.php?mod=overview&sh=577fadb1eed732dc28b4cd2654f8cf2f&web_redirected=1"><img src="http://adsm.gameforge.de/login.gif?game=gladiatus&lang=dk&gr=2&uid=32941&email=&nicname=aldius" style="display:none" />
  <img src="http://analytics.gameforge.de/cp.php?game=gladiatus&lang=dk&gr=2&action=login&uid=32941" style="display:none" />

Jeg tager url'en i første tag og kalder. Så får jeg en "Account warrned error", så jeg tror det stadig er noget authentication halløj.

Ændret kode:

Dim UserID As String = "aldius" ' Username
    Dim PWord As String = "password" ' Password
    Dim domain As String = "http://s2.gladiatus.dk/game/index.php?mod=login"
    Dim encoding As New System.Text.ASCIIEncoding
    Dim CookieC As New Net.CookieContainer
    Dim HTML As String
    Dim LoginReq As Net.HttpWebRequest
    Dim SendReq As IO.Stream
    Dim LoginRes As Net.HttpWebResponse
    Dim sReader As IO.StreamReader

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        ' Use the appropriate HTML field names to stuff into the post header
        Dim PostData As String = _
            "user=" & UserID & _
            "&pass=" & PWord ' Note: where txtUName & txtPWord are the field names
        Dim Data() As Byte = encoding.GetBytes(PostData)

        ' Initialise the request
        LoginReq = Net.WebRequest.Create(domain) ' Login location taken from the form action
        With LoginReq
            .KeepAlive = True
            .Method = "POST"                     
            .AllowAutoRedirect = False
            .ContentType = "application/x-www-form-urlencoded"
            .ContentLength = Data.Length
            .Referer = "http://s2.gladiatus.dk/game/index.php?mod=login"
            ' Set empty container
            .CookieContainer = CookieC
        End With

        ' Add the POST data
        SendReq = LoginReq.GetRequestStream
        SendReq.Write(Data, 0, Data.Length)
        SendReq.Close()

        ' Obtain the response
        LoginRes = LoginReq.GetResponse()
        sReader = New IO.StreamReader(LoginRes.GetResponseStream)
        HTML = sReader.ReadToEnd

        Dim tstr As String
        tstr = HTML.Substring(HTML.IndexOf("URL"))
        tstr = tstr.Substring(4)
        tstr = "http://s2.gladiatus.dk/game/" + tstr.Substring(0, tstr.IndexOf("><"))

        LoginReq = Net.WebRequest.Create(tstr) ' Login location taken from the form action
        With LoginReq
            .KeepAlive = True
            .Method = "GET"

            '.AllowAutoRedirect = False
            .ContentType = "application/x-www-form-urlencoded"
            .ContentLength = Data.Length
            ' Set empty container
            .CookieContainer = CookieC
        End With
     
        ' Obtain the response
        LoginRes = Nothing
        LoginRes = LoginReq.GetResponse()
        sReader = New IO.StreamReader(LoginRes.GetResponseStream)
        HTML = sReader.ReadToEnd

end sub
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester