.NET 4.x Получение cookie из POST/GET запросов - C#
Формулировка задачи:
Здравствуйте.
Писал программу на C#. Задача состояла в том чтобы отправить запрос на сервер и при успешной авторизации получить заветные КУКИ!
При этом у меня возникла масса проблем, у меня почему-то бралось только 1 значение КУКИ с параметром HTTPonly. Брал куки с помощью CookieContainer простым способом:
Ну и что, получаю в CookieContainer ТОЛЬКО ОДНО ПОЛЕ: PHPSESSID; А их там помимо этого еще очень много.
И я себе думаю, ну может какая-то защита на сервере или еще что-то пошло не так...
Но тут я решаю воспользоваться cURL в PHP. Пишу идентичный код:
И что в итоге? А вот что:
Этот текст сгенерировали эти строки:
И самое главное, я получил помимо
string data = "login=" + c_login + "&pass=" + c_password + "&LOGIN_redirect=1&lreseted=0&preseted=0"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.heroeswm.ru/login.php"); request.Method = "POST"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; request.AllowAutoRedirect = false; request.ContentType = "application/x-www-form-urlencoded"; byte[] EncodedPostParams = Encoding.GetEncoding(1251).GetBytes(data); request.ContentLength = EncodedPostParams.Length; request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length); request.GetRequestStream().Close(); CookieContainer authInfo = new CookieContainer(); request.CookieContainer = authInfo; HttpWebResponse response = (HttpWebResponse)request.GetResponse(); authInfo = request.CookieContainer;
$curl = curl_init(); curl_setopt($curl, CURLOPT_URL, 'http://www.heroeswm.ru/login.php'); curl_setopt($curl, CURLOPT_HEADER, 1); curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, 'login=' . $login . '&pass=' . $password . '&LOGIN_redirect=1&lreseted=0&preseted=0'); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0'); curl_setopt ($curl, CURLOPT_COOKIEFILE, 'c.txt'); curl_setopt ($curl, CURLOPT_COOKIEJAR, 'c.txt'); $res = curl_exec($curl); if(!$res) { $error = curl_error($curl).'('.curl_errno($curl).')'; return $error; } else { curl_close($curl); return $res; }
sid 96647ba3b1db5f183807c1c2e9e164c0
pl_id 4198923
PHPSESSID 59fdd35df6d800a8faa3316950850ead
curl_setopt ($curl, CURLOPT_COOKIEFILE, 'c.txt'); curl_setopt ($curl, CURLOPT_COOKIEJAR, 'c.txt');
PHPSESSID
так нужные мнеsid
иpl_id
. Тоесть я получил все. Результат. Почему С# не делает то что сделал PHP. Я сомневаюсь что C# сильно этому PHP уступает. Значит Я что-то делаю не так... Так вот, в чем собственно проблема? Может использовать какой-то другой метод чтобы получит все куки? Подскажите... Заранее благодарен.Не по теме:
PS: Тема: "C# слаб?" - просто хотел привлечь внимание.
Решение задачи: «.NET 4.x Получение cookie из POST/GET запросов»
textual
Листинг программы
string data = "login=" + c_login + "&pass=" + c_password + "&LOGIN_redirect=1&lreseted=0&preseted=0"; HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.heroeswm.ru/login.php"); request.Method = "POST"; request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"; request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"; request.ContentType = "application/x-www-form-urlencoded"; request.AllowAutoRedirect = false; CookieContainer authInfo = new CookieContainer(); request.CookieContainer = authInfo; byte[] EncodedPostParams = Encoding.GetEncoding(1251).GetBytes(data); request.ContentLength = EncodedPostParams.Length; request.GetRequestStream().Write(EncodedPostParams, 0, EncodedPostParams.Length); request.GetRequestStream().Close(); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); MessageBox.Show(request.CookieContainer.GetCookieHeader(request.RequestUri));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д