|
You last visited: Today at 03:25
Advertisement
HttpWebRequest Login
Discussion on HttpWebRequest Login within the .NET Languages forum part of the Coders Den category.
10/18/2015, 17:21
|
#1
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
HttpWebRequest Login
Hallo,
Veruche derzeit mir HttpWebRequest etwas näher zu bringen. Wollte mal zum testen eine kleines Programm schreiben, was sich nur in epvp einloggt.
Der response wird in eine RichTextbox geladen und dann direkt in nem Webrowser angezeigt. Soweit so gut.
Wenn ich jetzt also das Programm starte und mich per Webrequest einlogge komme ich auch auf die Seite "Danke für deine Anmeldung. Wenn dein Browser dich nicht automatisch weiterleitet, dann klicke bitte hier...". Wenn mich der Browser dann aber weiterleitet, bin ich nicht eingeloggt.
Hab im Inetexplorer schon Cookies komplett zugelassen.
Mein Code:
Code:
Dim cookieCon As CookieContainer
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim postData As String = "vb_login_username=" & TextBox1.Text & "&vb_login_password=" & TextBox2.Text & "&cookieuser=1&s=&securitytoken=1445179991-b75a6c52d0a5a816f245a4253bd8c59bfcf13204&do=login&vb_login_md5password=&vb_login_md5password_utf="
Dim tempCookie As New CookieContainer
Dim encoding As New UTF8Encoding
Dim byteData As Byte() = encoding.GetBytes(postData)
Dim postReq As Net.HttpWebRequest = DirectCast(WebRequest.Create("http://www.elitepvpers.com/forum/login.php?do=login"), Net.HttpWebRequest)
postReq.Method = "POST"
postReq.KeepAlive = True
postReq.CookieContainer = tempCookie
postReq.ContentType = "application/x-www-form-urlencoded"
postReq.Referer = "http://www.elitepvpers.com/forum/login.php?do=login"
postReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"
postReq.ContentLength = byteData.Length
Dim postreqstream As Stream = postReq.GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
Dim postresponse As HttpWebResponse
postresponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
tempCookie.Add(postresponse.Cookies)
cookieCon = tempCookie
Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
Dim thepage As String = postreqreader.ReadToEnd
RichTextBox1.Text = thepage
End Sub
Bitte steinigt mich nicht weil ich die Objekte nicht richtig benannt habe. Wird nicht zur Angewohnheit
Für Hilfe wäre ich sehr dankbar
MfG
|
|
|
10/18/2015, 17:51
|
#2
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
den cookie container musst du vorher initialisieren und wenn du dir nachher funktionen zu den requests machst solltest du den ByRef übergeben
Edit:
Was hat eigentlich der internet explorer mit dem ganzen zu tun?
|
|
|
10/18/2015, 18:40
|
#3
|
elite*gold: 15
Join Date: Feb 2013
Posts: 2,880
Received Thanks: 465
|
Wegen dem Webbrowser der mit dem Login nichts zu tun hat
Die Antwort auf dein Request kommt in den Browser. Warum bist du nicht eingeloggt?
Weil der Browser nichts damit zutun hat.
|
|
|
10/18/2015, 19:52
|
#4
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
Ich wollte durch den Webbrowser den Code aus der richtextbox anzeigen lassen. Um halt zu zeigen das ich mich wirklich eingeloggt habe. Und wegen dem Internetexplorer - ich habe gelesen das der Webbrowser als Objekt die Einstellungen des Internetexplorers uebernimmt.
Wenn nicht mit dem Webbrowser, wie kann ich dann prüfen ob ich mich erfolgreich per httpwebrequest eingeloggt habe?
Evtl. Per try Block?
Was genau ist mit initialisieren gemeint? Habe ja den Cookiecontainer per Dim deklariert.
|
|
|
10/18/2015, 19:58
|
#5
|
elite*gold: 14
Join Date: May 2013
Posts: 4,288
Received Thanks: 1,479
|
Lies dir am besten mal folgenden Thread durch, dort wurde das Thema schon einmal behandelt:
|
|
|
10/18/2015, 23:47
|
#6
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
Quote:
Originally Posted by Benjihz
1.) Wenn nicht mit dem Webbrowser, wie kann ich dann prüfen ob ich mich erfolgreich per httpwebrequest eingeloggt habe?
Evtl. Per try Block?
2.) Was genau ist mit initialisieren gemeint? Habe ja den Cookiecontainer per Dim deklariert.
|
1.) Du prüfst ob im html string etwas vorhanden ist was nur da ist wenn du auch eingeloggt bist. (z.b. der logout button)
2.) hab jetzt keine vb syntax im kopf. CookieContainer cookie = new CookieContainer();
|
|
|
10/19/2015, 10:06
|
#7
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
Quote:
Originally Posted by »FlutterShy™
1.) Du prüfst ob im html string etwas vorhanden ist was nur da ist wenn du auch eingeloggt bist. (z.b. der logout button)
2.) hab jetzt keine vb syntax im kopf. CookieContainer cookie = new CookieContainer();
|
1.) Danke dir
2.) Hab ich gemacht siehe mein Code Absatz 3. "Dim tempCookie as new cookiecontainer"
|
|
|
10/19/2015, 16:10
|
#8
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
Hier meine http klasse(in c#)
Code:
using System;
using System.Text;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
Code:
public class Http
{
public static CookieContainer stdCookie = new CookieContainer();
public static CookieContainer emptyCookie = null;
public static string LocationUrl = "";
public static string Post(string URL, string post, ref CookieContainer cookie)
{
string result;
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.Method = "POST";
httpWebRequest.CookieContainer = cookie;
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
byte[] bytes = Encoding.Default.GetBytes(post);
httpWebRequest.ContentLength = (long)bytes.Length;
Stream stream = httpWebRequest.GetRequestStream();
stream.Write(bytes, 0, bytes.Length);
stream.Close();
httpWebRequest.KeepAlive = true;
httpWebRequest.AllowAutoRedirect = true;
httpWebRequest.PreAuthenticate = true;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
stream = httpWebResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(stream);
string text = streamReader.ReadToEnd();
streamReader.Close();
stream.Close();
LocationUrl = httpWebResponse.ResponseUri.OriginalString;
httpWebResponse.Close();
result = text;
}
catch
{
result = "";
}
return result;
}
public static string Get(string URL, ref CookieContainer cookie)
{
string result;
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
httpWebRequest.Method = "GET";
httpWebRequest.CookieContainer = cookie;
httpWebRequest.ContentType = "application/x-www-form-urlencoded";
httpWebRequest.Proxy.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();
Stream responseStream = httpWebResponse.GetResponseStream();
StreamReader streamReader = new StreamReader(responseStream);
string text = streamReader.ReadToEnd();
streamReader.Close();
responseStream.Close();
LocationUrl = httpWebResponse.ResponseUri.OriginalString;
httpWebResponse.Close();
result = text;
}
catch
{
result = "";
}
return result;
}
public static string UrlEncode(string s)
{
return Uri.EscapeUriString(s);
}
public static string StringBetween(string s, string start, string end)
{
string ret = "";
try
{
ret = Regex.Match(s, start + "(.*)" + end).Groups[1].Value;
}
catch
{
}
return ret;
}
public static string MD5(string s)
{
MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider();
byte[] hash = provider.ComputeHash(Encoding.UTF8.GetBytes(s));
provider.Dispose();
return BitConverter.ToString(hash).Replace("-", "").ToLower();
}
public static string Base64Decode(string s)
{
return Encoding.UTF8.GetString(Convert.FromBase64String(s));
}
public static string Base64Encode(string s)
{
return Convert.ToBase64String(Encoding.UTF8.GetBytes(s));
}
}
|
|
|
10/19/2015, 19:27
|
#9
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
So, ich glaube ich habe den Fehler gefunden: Es liegt an den Cookies!
Einloggen funktioniert super, nur wenn ich dann z.B. auf die Home Seite des Forums navigieren möchte, bin ich nichtmehr eingeloggt. Ich glaube die Cookies werden nicht gespeichert.
Nur ich verstehe nicht wieso. Der CookieContainer wird ja jedesmal übergeben
Mein Code:
Code:
Private Sub btnStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStart.Click
Dim cookieCon As New CookieContainer
Dim request As HttpWebRequest = DirectCast(HttpWebRequest.Create("https://forum.die-staemme.de/login.php?do=login"), HttpWebRequest)
Dim username As String = TextBox1.Text
Dim password As String = TextBox2.Text
Dim post As String = "vb_login_username=" & username & "&vb_login_password=" & password & "&vb_login_password_hint=Kennwort&s=&securitytoken=guest&do=login&vb_login_md5password=&vb_login_md5password_utf="
POST_________LOGIN_________________________
request.Method = "POST"
request.CookieContainer = cookieCon
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:41.0) Gecko/20100101 Firefox/41.0"
request.ContentType = "application/x-www-form-urlencoded"
Dim byteArr() As Byte = Encoding.Default.GetBytes(post)
request.ContentLength = byteArr.Length
Dim dataStream As Stream = request.GetRequestStream()
dataStream.Write(byteArr, 0, byteArr.Length)
Dim response As HttpWebResponse = DirectCast(request.GetResponse(), HttpWebResponse)
Dim reader As New StreamReader(response.GetResponseStream())
Dim seitenQuelltext As String = reader.ReadToEnd()
If seitenQuelltext.Contains("Weiterleitung . . .") Then
Label3.Text = "Eingeloggt!"
seitenQuelltext = ""
Else
Label3.Text = "Fehler"
End If
GET____AUF HAUPTSEITTE_______________________________
request = DirectCast(HttpWebRequest.Create("https://forum.die-staemme.de/forum.php"), HttpWebRequest)
request.CookieContainer = cookieCon
request.KeepAlive = True
response = DirectCast(request.GetResponse(), HttpWebResponse)
reader = New StreamReader(response.GetResponseStream())
seitenQuelltext = reader.ReadToEnd()
If seitenQuelltext.Contains("Abmelden") Then
Label4.Text = "OK"
Else
Label4.Text = "Fehler"
End If
End Sub
MfG
|
|
|
10/19/2015, 19:46
|
#10
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
und nochmal
das mit den cookies habe ich dir schon gesagt war das jetzt was neues das da der fehler ist?
|
|
|
10/19/2015, 20:12
|
#11
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
Quote:
Originally Posted by »FlutterShy™
und nochmal
das mit den cookies habe ich dir schon gesagt war das jetzt was neues das da der fehler ist?
|
Sorry aber ich komme grade echt nicht weiter.
Ich habe den CookieContainer oben definiert und und dann beim Login und der Weiterleitung auf die HomeSeite direkt übergeben
Ich stehe grade aufm Schlauch.
Ich wäre dir sehr dankbar wenn du den Fehler aufzeigen könntest
Grüße
|
|
|
10/19/2015, 22:08
|
#12
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
nimm doch einfach meine klasse die funktioniert
|
|
|
10/19/2015, 22:12
|
#13
|
elite*gold: 100
Join Date: Feb 2012
Posts: 2,341
Received Thanks: 207
|
Quote:
Originally Posted by »FlutterShy™
nimm doch einfach meine klasse die funktioniert
|
Die ist aber in C# und nicht in Vb..
Ich wuerde nur gerne wissen wo der Fehler in meinem Code liegt
|
|
|
10/19/2015, 22:26
|
#14
|
elite*gold: 50
Join Date: Sep 2012
Posts: 3,841
Received Thanks: 1,462
|
Such dir einen aus
danach vergleichst du den code mit deinem
|
|
|
10/20/2015, 08:52
|
#15
|
elite*gold: 273
Join Date: Sep 2010
Posts: 1,831
Received Thanks: 786
|
Du hast dem CookieContainer nie irgendwelche Cookies gegeben, ich würde mal vermuten das dein CookieContainer leer ist, und du desshalb bei der 2ten Anfrage nicht mehr eingeloggt bist.
Überprüf doch mal den Inhalt des CookieContainers mit dem Debugger.
|
|
|
|
|
Similar Threads
|
Help with login httpwebrequest[VB]
07/11/2013 - .NET Languages - 3 Replies
Hy all , have code for login httpwebrequest name and pass , but i need server to
please help me , thanks
sorry for my bad english
|
[S] VB.Net login etc Hilfe ( HTTPWebrequest )
12/27/2012 - elite*gold Trading - 1 Replies
Habe ein paar fragen - Probleme etc dazu
Wer mir per Teamviewer dies erledigt erhält 26 E*G :)
Die Person sollte sich mit Login's in Spiele auskennen ( Serverwahlt ) etc
|
Brwosergame Login per Httpwebrequest mit Threads
11/24/2012 - .NET Languages - 6 Replies
Ich brauche hilfe:)
Ich habe schon alles mögliche versucht aber es geht einfach nciht:(
Ich möchte einen kleine Account checker schreiben für eine Brwosergame.
Mit Thread´s hier der Code
private void button1_Click(object sender, EventArgs e)
{
button1.Enabled = false;
|
HttpWebRequest Login
10/18/2012 - .NET Languages - 23 Replies
Hi ihr,
ich habe mich nun mal an HttpWebRequest gewagt und versucht mich darüber auf Elitepvpers einzuloggen.
private void button1_Click(object sender, EventArgs e)
{
CookieContainer cookieCon = new CookieContainer();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www .elitepvpers.com/forum/login.php?do=login");
request.Method = "POST";
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; rv:8.0)...
|
All times are GMT +2. The time now is 03:25.
|
|