Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.65/26: Рейтинг темы: голосов - 26, средняя оценка - 4.65
.NET ONLY
69 / 69 / 7
Регистрация: 05.10.2011
Сообщений: 495
1
.NET 4.x

Получение cookie из POST/GET запросов

18.01.2013, 01:19. Показов 5453. Ответов 6

Здравствуйте.
Писал программу на C#. Задача состояла в том чтобы отправить запрос на сервер и при успешной авторизации получить заветные КУКИ!
При этом у меня возникла масса проблем, у меня почему-то бралось только 1 значение КУКИ с параметром HTTPonly. Брал куки с помощью CookieContainer простым способом:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
Ну и что, получаю в CookieContainer ТОЛЬКО ОДНО ПОЛЕ: PHPSESSID; А их там помимо этого еще очень много.
И я себе думаю, ну может какая-то защита на сервере или еще что-то пошло не так...

Но тут я решаю воспользоваться cURL в PHP. Пишу идентичный код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$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
Этот текст сгенерировали эти строки:
PHP
1
2
curl_setopt ($curl, CURLOPT_COOKIEFILE, 'c.txt');
curl_setopt ($curl, CURLOPT_COOKIEJAR, 'c.txt');
И самое главное, я получил помимо PHPSESSID так нужные мне sid и pl_id. Тоесть я получил все.

Результат. Почему С# не делает то что сделал PHP. Я сомневаюсь что C# сильно этому PHP уступает. Значит Я что-то делаю не так...
Так вот, в чем собственно проблема? Может использовать какой-то другой метод чтобы получит все куки? Подскажите...

Заранее благодарен.

Не по теме:

PS: Тема: "C# слаб?" - просто хотел привлечь внимание.:p

0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.01.2013, 01:19
Ответы с готовыми решениями:

Получение и обработка POST запросов в web сервисе
Здравствуйте, мне дали задание на C# и .NET сделать веб-сервис и клиент. Суть в чем, клиент...

Нужен примерный код отправки GET и POST запросов на сайт, и получение ответа
Люди помогите пожалуйста, можете показать примерный код отправки GET и POST запросов на сайт, и...

POST-запрос + Cookie
Может кто подсказать какие данные отправлять в пост запросе? Это разбор запроса из Fiddler. POST...

Авторизация на сайте POST+Cookie
Тема для тех, кто знаком с DevelStudio 3.0 Есть такой код: $ch = curl_init(); curl_setopt($ch,...

6
1267 / 968 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
18.01.2013, 01:26 2
можно просто взять куки из заголовка response.Headers[HttpResponseHeader.SetCookie]
контейнер очень мудреный, это не просто список строк, там все раскладывается по доменам и адресам как положено -возможно потому и не видно остальных
0
.NET ONLY
69 / 69 / 7
Регистрация: 05.10.2011
Сообщений: 495
18.01.2013, 01:31  [ТС] 3
Цитата Сообщение от m0nax Посмотреть сообщение
там все раскладывается по доменам и адресам как положено -возможно потому и не видно остальных
Читал об этом. Думал может я просто неправильно просматриваю содержимое CookiesContainer, но я просто его решил использовать в следующем запросе который требует наличия всех нужных параметров в куки, и ОН НЕ СРАБОТАЛ. Значит что, там небыло параметра pl_id.

Ну сейчас еще попробую Ваш совет насчет:
C#
1
response.Headers[HttpResponseHeader.SetCookie]
Может так получится.
0
767 / 547 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
18.01.2013, 15:39 4
Как решить проблему знаю ,но зашел просто из интереса , посмотреть чем слаб C#
1
.NET ONLY
69 / 69 / 7
Регистрация: 05.10.2011
Сообщений: 495
18.01.2013, 19:56  [ТС] 5
Цитата Сообщение от Vitall Посмотреть сообщение
но зашел просто из интереса , посмотреть чем слаб C#
Как знал что эта тема зацепит!

Цитата Сообщение от Vitall Посмотреть сообщение
Как решить проблему знаю
Эм... Собственно, если знаете, то не могли бы Вы поделится с нами?

Добавлено через 2 часа 26 минут
Огромное спасибо Vitall за помощь!
Решение Vitall:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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));
0
sau
18.01.2013, 21:55
  #6

Не по теме:

Только собрался написать гневный мессадж ) - слаб не c# , просто у кого то... :p

0
.NET ONLY
69 / 69 / 7
Регистрация: 05.10.2011
Сообщений: 495
19.01.2013, 21:57  [ТС] 7
Цитата Сообщение от sau Посмотреть сообщение
слаб не c# , просто у кого то...

Не по теме:

омг. не говорю что он слаб. просто привлек внимание.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.01.2013, 21:57

Веб-сервер и POST-запрос, Cookie
пишу веб-сервер. есть форма на сайте, где заполняется логин и пароль. в результате пост-запрос...

Авторизация POST, cookie, user-agent ...
Доброго времени суток! Как подобное реализовать на unity? Другими словами, как в Unity...

Как передать cookie с post запросом?
Привет , вот есть такой код string uri = "сайт"; HttpWebRequest...

передавать POST запрос серверу с Cookie
Всем привет, столкнулся с проблемой, я передавал POST запросы на сервер с помощью такого метода ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.