Авторизоваться на сайте программно - C#
Формулировка задачи:
В общем, нужно проверить успешна ли была авторизация и авторизоваться на одном сайте, ниже привожу код: прочитал много информации, как на вашем сайте, так и на других, но что-то пока никак, использую fiddler, я авторизовался на сайте отловил запрос, мне нужно вытащить оттуда куки, которые передаются при успешной авторизации, но их чот там много, не могу понять что и как, помогите разобраться, если надо, приведу код запросов, только скажите что нужно выложить. Заранее спасибо
using (var Request = new HttpRequest())
{
HttpResponse Response;
Request.AllowAutoRedirect = false;
Request.UserAgent = HttpHelper.RandomUserAgent();
Response = Request.Post("сайт/login.php?do=login", "do=login&vb_login_md5password=7d8912cc12047dd56d61298887ae89b2&vb_login_md5password_utf=7d8912cc12047dd56d61298887ae89b2&vb_login_username=" + login + "&vb_login_password=" +password);
if (Response.Cookies.ContainsKey("куки"))
{
return "True";
}
else
{
return "False";
}
}Решение задачи: «Авторизоваться на сайте программно»
textual
Листинг программы
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Text;
namespace ConsoleApplication17
{
class Program
{
static void Main()
{
const string password = "qwerty12";
const string login = "qwertysgu@yandex.ru";
var request = PW.Login(login, password);
}
}
public class PW
{
private const string SiteUrl = "http://pw.mail.ru";
public static string Login(string login, string password)
{
const string loginUrl = SiteUrl + "/login.php?do=login";
const string postDataMask = "s=&do=login&vb_login_md5password={2}&vb_login_md5password_utf={2}&vb_login_username={0}&vb_login_password={1}";
var pwMD5 = CalculateMD5(password);
string postData = string.Format(postDataMask, WebUtility.UrlEncode(login), password, pwMD5);
return PostMethod(loginUrl, postData);
}
private static string CalculateMD5(string input)
{
MD5 md5Hasher = MD5.Create();
var sb = new StringBuilder();
byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
foreach (byte b in data)
{
sb.Append(b.ToString("x2"));
}
return sb.ToString();
}
private static string PostMethod(string url, string postData)
{
ServicePointManager.Expect100Continue = false;
try
{
var request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Credentials = CredentialCache.DefaultCredentials;
request.KeepAlive = true;
request.UserAgent =
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36";
request.CookieContainer = new CookieContainer();
//request.CookieContainer.Add(uri, new Cookie("b", "Iz8BACD4AA8AD0MMPgAAAQAA"));
//request.CookieContainer.Add(uri,new Cookie("mrcu", "D7D5533D72F8010453693801030A"));
//request.CookieContainer.Add(uri,new Cookie("p", "TBUAAJr+ZgAA"));
//request.CookieContainer.Add(uri,new Cookie("mc1", "1397377009"));
//request.CookieContainer.Add(uri,new Cookie("mc2", "pw.mail.ru"));
//request.CookieContainer.Add(uri,new Cookie("VID", "3V57iC0VhGXD"));
//request.CookieContainer.Add(uri, new Cookie("n_js", "4082312435"));
//request.CookieContainer.Add(uri,new Cookie("s", "rt=1|dpr=1.75"));
var bytes = Encoding.UTF8.GetBytes(postData);
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = bytes.Length;
using (var requestStream = request.GetRequestStream())
{
requestStream.Write(bytes, 0, bytes.Length);
requestStream.Close();
}
var response = (HttpWebResponse)request.GetResponse();
using (var responseStream = response.GetResponseStream())
{
if (responseStream == null || response.StatusCode != HttpStatusCode.OK)
throw new WebException("Ошибка при получении ответа, код ответа = " + response.StatusCode);
using (var sr = new StreamReader(responseStream, Encoding.UTF8))
return sr.ReadToEnd();
}
}
finally
{
ServicePointManager.Expect100Continue = true;
}
}
}
}