-
12. 02. 2009, 18:13 #1
[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
-
12. 02. 2009, 18:16 #2
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
-
12. 02. 2009, 18:18 #3
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;
-
12. 02. 2009, 18:53 #4
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
-
12. 02. 2009, 19:16 #5
Re: [VB.Net] WebRequest mit Cookie
wie wärs damit
und nurnoch aufrufenPHP-Code:public void Request(string url, string postdaten, CookieContainer Coookies)
{
//hier kommt der Request
Request.CookieContainer = Coookies;
}
PHP-Code:CookieContainer Cookies = new CookieContainer();
//Request1
Request("url", "daten", Cookies);
//Request2
Request("url", "daten", Cookies);
-
12. 02. 2009, 19:28 #6
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.
-
12. 02. 2009, 20:35 #7
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)
-
12. 02. 2009, 21:20 #8Mitglied
- Registriert seit
- Mar 2008
- Beiträge
- 333
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...

-
13. 02. 2009, 06:55 #9
Re: [VB.Net] WebRequest mit Cookie
Klar, hier ist er:
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.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
~Thau
-


Zitieren
mehr lesen...







"Wir können nichts dazu" -...
Gestern, 21:23 in gulli:news