none
WebRequest и проблема с cookie RRS feed

  • Вопрос

  • Добрый день!

    Условие: Есть страница, допустим www.mydomain.ru. На ней форма www.mydomain.ru/enter.php с полями логина и пароля. После ввода которых в инспекторе страниц я вижу реквест на www.mydomain.ru/enter.php, в респонзе которого устанавливаются куки SessionID и аналогичные. У этого запроса в статусе стоит 302 редирект на страницу www.mydomain.ru/battle.php.

    Проблема: Когда я делаю из c# кода запрос на  www.mydomain.ru/enter.php с моими логином и паролем, то запрос выполняется успешно, с кодом 200(OK), но в реквесте стоит уже www.mydomain.ru/battle.php и сообщается, что у меня не хватает куков. То есть средний запрос с 302 редиректом как бы пролетает, проскакивает, и я не успеваю вытащить нужные мне кукисы.

    Я могу приложить скрины и полный код, если кто-то действительно сможет мне помочь.


    17 июня 2014 г. 14:33

Ответы

Все ответы

  • А что говорит фидлер по поводу ваших действий в броузере и из кода?
    17 июня 2014 г. 15:33
  • Добрый день, покажите код, скорее проблема с cookie-контейнером.
    • Предложено в качестве ответа Antsybor Evhen 18 июня 2014 г. 13:10
    • Отменено предложение в качестве ответа Antsybor Evhen 18 июня 2014 г. 13:55
    17 июня 2014 г. 23:26
  • public ActionResult myMon() { string url = "http://mycombats.org/enter.php"; HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.AllowWriteStreamBuffering = true; request.Method = "POST"; string post = "login=Логин&psw=Пароль"; request.ContentLength = post.Length; request.ContentType = "application/x-www-form-urlencoded"; CookieCollection cookies = new CookieCollection(); request.CookieContainer = new CookieContainer(); request.CookieContainer.Add(cookies); using (Stream writeStream = request.GetRequestStream()) { byte[] bytes = Encoding.GetEncoding("windows-1251").GetBytes(post); writeStream.Write(bytes, 0, bytes.Length); } HttpWebResponse response = request.GetResponse() as HttpWebResponse;

    cookies = response.Cookies; //================================================================== //url = "http://mycombats.com/zayavka.php?level=haos"; //request = WebRequest.Create(url) as HttpWebRequest; //request.Method = "GET"; ////request.CookieContainer = new CookieContainer(); ////request.CookieContainer.Add(cookies); //response = request.GetResponse() as HttpWebResponse; //================================================================== string ss = ""; StreamReader srr; string status = response.StatusCode.ToString(); srr = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("windows-1251")); ss = srr.ReadToEnd(); srr.Close(); response.Close(); return View((object)ss); }

    В отладчике видно, что полученный респонз ссылается на запрос www.mydomain.ru/battle.php, проскакивая  www.mydomain.ru/enter.php. Кукисы пустые.
    18 июня 2014 г. 10:47
  • Попробуй добавить
    request.AllowAutoRedirect = false;
    • Изменено Antsybor Evhen 18 июня 2014 г. 13:52
    • Предложено в качестве ответа YatajgaEditor 20 июня 2014 г. 13:53
    • Помечено в качестве ответа YatajgaEditor 23 июня 2014 г. 6:08
    18 июня 2014 г. 13:51
  • Добрый день, вы каждый раз пересоздаете куки-контейнер:

    request.CookieContainer = new CookieContainer();

    Попробуйте вынесите CookieContainer в глобальную переменную, инициализируйте его один раз, а в последующих вызовах подставляйте ранее полученное значение.

    18 июня 2014 г. 23:37
  • Попробуй добавить
    request.AllowAutoRedirect = false;
    Вот за это большое человеческое спасибо!
    20 июня 2014 г. 13:29