.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));
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д