Code:
public class Http
{
public string PostRequest(string host, string path, string spostPacket)
{
var cookies = Cookies.GetInstance();
var cookieContainer = new CookieContainer();
byte[] postPacket = Encoding.UTF8.GetBytes(spostPacket);
var request = (HttpWebRequest) HttpWebRequest.Create("http://" + host + path);
request.CookieContainer = cookieContainer;
request.Method = "POST";
request.Host = host;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1";
request.ConnectionGroupName = "keep-alive";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = postPacket.Length;
request.Proxy = new WebProxy();
foreach (var cookie in cookies.GetCookies())
{
request.CookieContainer.Add(cookie);
}
var dataStream = request.GetRequestStream();
dataStream.Write(postPacket, 0, postPacket.Length);
var response = (HttpWebResponse)request.GetResponse();
var responseType = response.ContentType;
dataStream = response.GetResponseStream();
var responseStream = new StreamReader(dataStream);
var html = responseStream.ReadToEnd();
if(response.Cookies.Count != 0)
{
List<Cookie> retCookie = new List<Cookie>();
for (int i = 0; i < response.Cookies.Count; i++)
{
retCookie.Add(response.Cookies[i]);
}
cookies.SetCookies(retCookie);
}
dataStream.Close();
return html;
}
public string GetRequest(string host, string path = "")
{
var cookies = Cookies.GetInstance();
var cookieContainer = new CookieContainer();
var request = (HttpWebRequest)WebRequest.Create("http://" + host + path);
request.CookieContainer = cookieContainer;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";
request.ConnectionGroupName = "keep-alive";
request.Host = host;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1";
request.Proxy = new WebProxy();
foreach (var cookie in cookies.GetCookies())
{
request.CookieContainer.Add(cookie);
}
var response = (HttpWebResponse)request.GetResponse();
var dataStream = response.GetResponseStream();
var responseStream = new StreamReader(dataStream);
var html = responseStream.ReadToEnd();
if (response.Cookies.Count != 0)
{
List<Cookie> retCookie = new List<Cookie>();
for (int i = 0; i < response.Cookies.Count; i++)
{
retCookie.Add(response.Cookies[i]);
}
cookies.SetCookies(retCookie);
}
dataStream.Close();
return html;
}
}
Code:
public class Cookies
{
private List<Cookie> _cookies = new List<Cookie>();
private static Cookies _cookiesInstance;
public static Cookies GetInstance()
{
if (_cookiesInstance != null)
return _cookiesInstance;
_cookiesInstance = new Cookies();
return _cookiesInstance;
}
private Cookies(){}
public List<Cookie> GetCookies()
{
return _cookies;
}
public void SetCookies(List<Cookie> cookies )
{
_cookies = cookies;
}
}
public class CookieEntity
{
public Cookie cookie { get; set; }
}
Das sind zwei alte Methoden von mir, zwar nicht perfekt nach den Normen gecoded, aber da kannst du über die Cookies immer checken, ob dein Login erfolgreich war. Außerdem werden die Cookies immer automatische gespeichert und wieder neu mitgegeben.
Ein Login bei epvp würde dann so aussehen:
Code:
var httpRequest = new Http();
var html = string.Empty;
html = httpRequest.GetRequest(@"www.elitepvpers.com");
html = httpRequest.PostRequest(@"www.elitepvpers.com", "/forum/login.php?do=login", @"vb_login_username=" + usrName + @"&vb_login_password=&cookieuser=1&s=&securitytoken=" + "guest" + "&do=login&vb_login_md5password="+ GetMd5Hash(password).ToLower() +"&vb_login_md5password_utf=" + GetMd5Hash(password).ToLower());
Zum Login prüfen:
Code:
Cookies.GetInstance().GetCookies().Contains("COOKIEDASEXISTIERENMUSSWENNDUEINGELOOGTBIST")