Ergebnis 1 bis 9 von 9
  1. #1
    Brenne..Engel brenne.... Avatar von Thau
    Registriert seit
    Nov 2005
    Beiträge
    186

    Standard [VB.Net] WebRequest mit Cookie

    Hallo, ich hab mir folgende Funktion zusammengebaut und hab das Problem, wenn ich das erste Mal die Funktion aufrufe und mich auf einer Seite einlogge zeigt er mit im Quelltext an das ich eingeloggt bin, nur wenn ich dann eine weitere Abfrage mache mit einer Unterseite die beim einloggen zu sehen ist heißt es ich bin nicht mehr eingeloggt. Ich hab das Gefühl, das er den Cookie nicht weiter benutzt. Hier der Code:

    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

  2. #2
    Mitglied Avatar von HyP3r92
    Registriert seit
    Feb 2007
    Beiträge
    1.079

    Standard Re: [VB.Net] WebRequest mit Cookie

    benutze nicht den Nervigen Cookie Container. Nimm einfach den Set-Cookie Header und übergeben diesen bei dem nächsten Request als Cookie header.

    Fertig

    mfg
    HyP3r

  3. #3
    Mitglied Avatar von The_Creed
    Registriert seit
    Dec 2008
    Beiträge
    1.134

    Standard Re: [VB.Net] WebRequest mit Cookie

    bei mir geht das so (C# Code)

    PHP-Code:
    CookieContainer Cookies = new CookieContainer();

    httpRequest.CookieContainer Coookies;
    httpRequest2.CookieContainer Coookies

  4. #4
    Brenne..Engel brenne....

    (Threadstarter)

    Avatar von Thau
    Registriert seit
    Nov 2005
    Beiträge
    186

    Standard Re: [VB.Net] WebRequest mit Cookie

    Hab das jetzt mal mit den Headern ausprobiert, aber irgendwie klappt das ganze nicht so. Hier mal mein Code. Kannst du den Notfalls so korrigieren, das er funktioniert? danke

    @The_Creed: ich wollte den request über eine funktion machen und nicht mehrere requests gleichzeitig

    Code:
    'Dim cookieContainer As CookieContainer = New CookieContainer()
        Dim mycookie As String
    
    
    
        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.Set(HttpRequestHeader.Cookie, mycookie)
            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)
                    mycookie = response.Cookies.ToString
                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 'das ist die auslese sie ist (!) nicht geeignet wenn ihr einen Request an ein Bild/SWF ö.ä. macht da es durch das ASCII sonst zerstört wird
    
            Return buffer
        End Function

  5. #5
    Mitglied Avatar von The_Creed
    Registriert seit
    Dec 2008
    Beiträge
    1.134

    Standard Re: [VB.Net] WebRequest mit Cookie

    wie wärs damit

    PHP-Code:
    public void Request(string urlstring postdatenCookieContainer Coookies)
    {
    //hier kommt der Request 
    Request.CookieContainer Coookies;

    und nurnoch aufrufen

    PHP-Code:
    CookieContainer Cookies = new CookieContainer(); 

    //Request1
    Request("url""daten"Cookies);

    //Request2
    Request("url""daten"Cookies); 

  6. #6
    Brenne..Engel brenne....

    (Threadstarter)

    Avatar von Thau
    Registriert seit
    Nov 2005
    Beiträge
    186

    Standard Re: [VB.Net] WebRequest mit Cookie

    Ne, das funktioniert leider nicht, da der inhalt des globalen cookie container nicht aktualisiert wird und da auch keine werte zugewiesen werden.

  7. #7
    Brenne..Engel brenne....

    (Threadstarter)

    Avatar von Thau
    Registriert seit
    Nov 2005
    Beiträge
    186

    Standard Re: [VB.Net] WebRequest mit Cookie

    So habs jetzt hinbekommen.
    Ich habe meine erste Funktion so umgebaut, dass sie mir den cookie zurückgibt und in die mycookie variable schreibt. Dann hab ich eine zweite funktion die die inhalte mit dem erhaltenen cookie die inhalte ausließt(also eingeloggt)

  8. #8
    Mitglied
    Registriert seit
    Mar 2008
    Beiträge
    333

    Standard Re: [VB.Net] WebRequest mit Cookie

    könntest Du villeicht den ganzen Code Posten oder mir per PN zukommen lassen? Weil ich hab grad das selbe Problem...

  9. #9
    Brenne..Engel brenne....

    (Threadstarter)

    Avatar von Thau
    Registriert seit
    Nov 2005
    Beiträge
    186

    Standard Re: [VB.Net] WebRequest mit Cookie

    Klar, hier ist er:

    Code:
    Dim mycookie As String
    
        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.UTF8.GetBytes(PostData)
            request = Net.WebRequest.Create(URL)
    
            request.Method = "POST"
            request.Accept = "*/*"
    
            request.Headers.Add(Net.HttpRequestHeader.AcceptLanguage, "de")
            request.Headers.Add("UA-CPU", "x86")
            request.Headers.Set(HttpRequestHeader.Cookie, mycookie)
            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.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
    
        Public Function GetCookie(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 data As Byte() = System.Text.Encoding.UTF8.GetBytes(PostData)
            request = Net.WebRequest.Create(URL)
    
            request.CookieContainer = New 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
                    Return cookie.ToString
                Next
            Else
                MessageBox.Show("no Cookie")
    
            End If
    
            Return 0
    
        End Function
    Die Funktion GetCookie will halt als übergabe die URL und die Postdaten zum Login und gibt diese dann zurück, also muss man dann nur z.B. mit mycookie = GetCookie(UrlTextBox.Text, PostDataTextBox.Text) zuweisen. Danach kann man mit InfoRequest und den Parametern die Infos als eingeloggt Person abrufen.

    ~Thau

  10.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •