[VB.Net] WebRequest mit Cookie

Thau

Mitglied
Hi, ich wollte mit folgender Funktion meine WebRequests machen.
Code:
Dim cookieContainer As CookieContainer = New CookieContainer()

    Private Function Request(ByVal URL as String, ByVal PostData as String) as String
        Dim request As HttpWebRequest
        Dim response As HttpWebResponse
        Dim str, str2 As IO.Stream

        Dim buffer As String

        Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(PostData) 

        request = Net.WebRequest.Create(URL)
        request.CookieContainer = cookieContainer
        request.Method = "POST"
        request.Accept = "*/*"

        request.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "de")
        request.Headers.Add("UA-CPU", "x86")
        request.Headers.Add(Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate")
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) "

        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = data.Length

        str2 = request.GetRequestStream()
        str2.Write(data, 0, data.Length)
        str2.Close()

        response = request.GetResponse
        str = response.GetResponseStream()

        If response.Cookies IsNot Nothing AndAlso response.Cookies.Count <> 0 Then
            For Each cookie As Cookie In response.Cookies
                MessageBox.Show(cookie.ToString)
            Next
        Else
            ' No cookie
        End If

        If (response.ContentEncoding.ToLower().Contains("gzip")) Then
            str = New IO.Compression.GZipStream(str, IO.Compression.CompressionMode.Decompress)
        ElseIf (response.ContentEncoding.ToLower().Contains("deflate")) Then
            str = New IO.Compression.DeflateStream(str, IO.Compression.CompressionMode.Decompress)
        End If 'Fall der Server die Page in GZIP / Deflate zurück gibt dann habt hier einen Decoder 

        buffer = New IO.StreamReader(str, System.Text.Encoding.ASCII).ReadToEnd 
        return buffer
    End Function

Wenn ich damit eine Abfrage mache bekomme ich zwar den Quelltext und die Cookies der Seite ausgegeben nur würde ich die Cookies auch gerne weiter verwenden. Also das ich z.B. eine Abfrage machen zum einloggen, dann den Cookie anlege und danach mit dem Cookie weitere abfragen machen kann.
 
Hab jetzt noch weiter rumprobiert, aber es geht och immer nicht.

Code:
'Dim cookieContainer As CookieContainer = New CookieContainer()
    Dim cookieContainer As New CookieCollection()


Public Function InfoRequest(ByVal URL As String, ByVal PostData As String) As String
        Dim request As HttpWebRequest
        Dim response As HttpWebResponse
        Dim str, str2 As IO.Stream

        Dim buffer As String

        Dim data As Byte() = System.Text.Encoding.ASCII.GetBytes(PostData) 
        request = Net.WebRequest.Create(URL)
        'request.CookieContainer = cookieContainer

        request.CookieContainer = New CookieContainer()

        Try
            request.CookieContainer.Add(cookieContainer)
        Catch exp As Exception
            MessageBox.Show("kein cookie übergeben")
        End Try
        request.Method = "POST"
        request.Accept = "*/*"

        request.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "de")
        request.Headers.Add("UA-CPU", "x86")
        request.Headers.Add(Net.HttpRequestHeader.AcceptEncoding, "gzip, deflate")
        request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; .NET CLR 3.0.30618) "

        request.ContentType = "application/x-www-form-urlencoded"
        request.ContentLength = data.Length

        str2 = request.GetRequestStream()
        str2.Write(data, 0, data.Length)
        str2.Close()

        response = request.GetResponse
        str = response.GetResponseStream()

        If response.Cookies IsNot Nothing AndAlso response.Cookies.Count <> 0 Then
            For Each cookie As Cookie In response.Cookies
                MessageBox.Show(cookie.ToString)
                cookieContainer = response.Cookies
            Next
        Else
            MessageBox.Show("no Cookie")
        End If

        If (response.ContentEncoding.ToLower().Contains("gzip")) Then
            str = New IO.Compression.GZipStream(str, IO.Compression.CompressionMode.Decompress)
        ElseIf (response.ContentEncoding.ToLower().Contains("deflate")) Then
            str = New IO.Compression.DeflateStream(str, IO.Compression.CompressionMode.Decompress)
        End If

        buffer = New IO.StreamReader(str, System.Text.Encoding.UTF8).ReadToEnd 

        Return buffer
    End Function
 
Hi,

was funktioniert denn bei dir nicht?
Kriegst du bei dem ersten Aufruf Cookies zurück? (Hat dein Responseobjekt überhaupt Cookies?)

Gruß Konstantin
 
Habe da ein ähnliches Problem.

bei request.coociecontainer wird ein count = 5 angezeigt (sollte doch bedeuten, dass es hier 5 cookies gibt, oder?)

bei response.cookie (wenn ich diese über "for each..." auslesen will, wird nichts mehr angezeigt...

Irgendwie verstehe ich das System nicht.

Eigentlich will ich mich nur bei einer Webseite einloggen und bei den nächsten POST-Requests die Cookies wieder mitsenden...

Gruß

Kai
 

Neue Beiträge

Zurück