C # - Управление cookie - PullRequest
       44

C # - Управление cookie

4 голосов
/ 12 мая 2011

Эй, ребята, я задал вопрос здесь ранее и получил несколько фантастических ответов.С тех пор я занимался Visual C # и столкнулся с небольшой проблемой.

Здесь я сделал простую страницу, которая устанавливает cookie:

http://binarywatch.biz/forms/cookietest.php

ЕслиВы идете к нему, а затем обновляете, он увидит, есть ли cookie, и изменит выходной HTML.

Теперь я хочу, чтобы моя программа на C # извлекала страницу, получала файл cookie и затем снова посещала страницу с установленным файлом cookie, чтобы моя страница представляла мне «обновленное» сообщение.Я выполнил первый этап через:

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        WebRequest request = WebRequest.Create("http://www.binarywatch.biz/forms/cookietest.php");

        request.Credentials = CredentialCache.DefaultCredentials;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();

        MessageBox.Show(responseFromServer, "Derp");

        reader.Close();
        dataStream.Close();
        response.Close();
    }

Итак, на данный момент у меня есть страница html, но я немного растерялся относительно того, как получить cookie (Что-то делать с CookieContainer ()?)и затем заставляя страницу узнать, что она у меня есть (каким-то образом добавив ее в httpwebrequest?)

Я, конечно, пытался найти ее в Google, но МНОГО ответов я нашел, касающиеся ASP.NET / веб-программирования, и этоне то, что мне нужно.

PS.В чем разница между WebRequest и HttpWebRequest?

Надеюсь, это не слишком глупо, я немного озадачен.

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

в соответствии с MSDN вы сначала создадите экземпляр CookieContainer перед вызовом getResponse. После этого вы сможете получить данные cookie из созданного вами CookieContainer.

(request as HttpWebRequest).CookieContainer = new CookieContainer();
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
CookieCollection cookies = (request as HttpWebRequest).CookieContainer.GetCookies("www.binarywatch.biz");
string myValue cookies["myCookie"].Value

Вы должны иметь возможность повторно использовать один и тот же объект CookieContainer, чтобы сервер продолжал получать доступ к файлам cookie.

Необходим GetCookies (домен), так как один CookieContainer может безопасно хранить отдельные куки для нескольких доменов.

1 голос
/ 12 мая 2011

Взято из "как использовать куки в httpwebrequest?"

Да, используйте CookieContainer.

CookieContainer cookieContainer = new CookieContainer();
httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(URL);
httpWebRequest.CookieContainer = cookieContainer;

Из этого ответа:

"После вызова GetResponse CookieContainer будет содержать куки отправляются обратно с запрошенного Url. "

Я не проверял это, но это был принятый ответ, поэтому он должен работать. Надеюсь, это работает для вас.

...