Проблема с cookie в WebRequest

217
29 апреля 2018, 19:40

Не могу понять, как получать cookie от сервера через WebRequest. Просто не устанавливает и не видит их... Через браузер всё нормально, отображается установленная cookie server_id.

string url = "http://site.ru/test.php";
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse) request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string result = reader.ReadToEnd();
System.Windows.Forms.MessageBox.Show(result);

На самом сайте (на странице test.php):

setCookie('server_id', 123, time() + 60 * 60 * 24 * 365, '/');
echo $_COOKIE['server_id'];
Answer 1

CookieContainer - это коллекция, в которую можно добавить необходимые объекты типа Cookie. Вы ее просто инициализируете, не добавляя ничего в нее.

То есть для того, что бы отправить Cookie, надо сделать что то вроде:

var container = new CookieContainer();
container.Add(new Cookie("Name_1", "Value"));
container.Add(new Cookie("Name_2", "Value"));

А уж затем эту коллекцию можно и задавать запросу.

По поводу получить...
У вас есть ответ от сервера, то есть HttpWebResponse response - у ответа есть та самая коллекция с Cookie. Просто возьмите нужный, как из обычной коллекции, либо пройдитесь циклом.

Вот пример от MS (для понятности того, какие значения можно вытянуть):

foreach (Cookie cook in response.Cookies)
{
    Console.WriteLine("Cookie:");
    Console.WriteLine("{0} = {1}", cook.Name, cook.Value);
    Console.WriteLine("Domain: {0}", cook.Domain);
    Console.WriteLine("Path: {0}", cook.Path);
    Console.WriteLine("Port: {0}", cook.Port);
    Console.WriteLine("Secure: {0}", cook.Secure);
    Console.WriteLine("When issued: {0}", cook.TimeStamp);
    Console.WriteLine("Expires: {0} (expired? {1})",
        cook.Expires, cook.Expired);
    Console.WriteLine("Don't save: {0}", cook.Discard);
    Console.WriteLine("Comment: {0}", cook.Comment);
    Console.WriteLine("Uri for comments: {0}", cook.CommentUri);
    Console.WriteLine("Version: RFC {0}", cook.Version == 1 ? "2109" : "2965");
    // Show the string representation of the cookie.
    Console.WriteLine("String: {0}", cook.ToString());
}
READ ALSO
Не возвращается большой объем данных request WebBrowser

Не возвращается большой объем данных request WebBrowser

Есть winform приложение на C#, которое формирует html-файл (форма ввода сведений: 5 полей для ввода текста и кнопка submit)На форме расположен WebBrowser,...

192
Combobox с CheckBox,как можно сделать?

Combobox с CheckBox,как можно сделать?

Необходимо сделать такой элемент,при помощи каких средств это делается?

214
Вложенные массивы в Unity

Вложенные массивы в Unity

В Unity в инспекторе не отображаются вложенные массивы или я что то не так делаю? Мне необходимо вывести массив массивов в инспектор для заполнения

221
Ошибка StackOverflowException в калькуляторе выражений

Ошибка StackOverflowException в калькуляторе выражений

Делаю калькулятор выражений (по типу 2 + (2 * sin(2^2)))) При запуске и вводе даже банального выражения (2 + 2) выдает StackOverflowExceptionЯ так понимаю проблема...

203