Cookie не добавляются в POST-запрос

318
13 августа 2017, 04:32

Делаю авторизацию в CMS Xenforo. Сперва с помощью get-запроса получаю куки, а потом уже отправляю его в POST-запросе. Все бы ничего, да в сниффере я не вижу ни одной куки в post-запросе, хотя я добавил его в CookieContainer.

static CookieContainer Cookie = new CookieContainer();
public static void Get() {
    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("https://xenforo.info/");
    request.CookieContainer = new CookieContainer();
    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36";
    HttpWebResponse response = (HttpWebResponse) request.GetResponse();
    Cookie.Add(response.Cookies);
}
public static void Post() {
    Get();
    var request = (HttpWebRequest) WebRequest.Create("http://xenforo.info/login/login");
    request.CookieContainer = new CookieContainer();
    request.CookieContainer = Cookie;
    var postData = "login=xxx";
    postData += "&register=0";
    postData += "&password=xxx";
    postData += "&cookie_check=1";
    postData += "&redirect=%2F";
    postData += "&_xfToken=";
    var data = Encoding.ASCII.GetBytes(postData);
    request.Referer = " https://xenforo.info/";
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    request.ContentLength = data.Length;
    request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36";
    using(var stream = request.GetRequestStream()) {
        stream.Write(data, 0, data.Length);
    }
    var response = (HttpWebResponse) request.GetResponse();
    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
}
Answer 1

Вот так будет работать (и не надо хранить весь контейнер с куками, только сами куки):

    private static CookieCollection cook;
    public static void Get()
    {
        ...
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        cook = response.Cookies;
    }
    public static void Post()
    {
        Get();
        var request = (HttpWebRequest) WebRequest.Create("https://xenforo.info/login/login");
        request.CookieContainer = new CookieContainer();
        request.CookieContainer.Add(new Uri("https://xenforo.info"), cook);
        ...
    }
READ ALSO
Создать таймер в Xamarin Android

Создать таймер в Xamarin Android

Нужно, чтобы через определенное время бездействия пользователя возвращало в главное менюСейчас таймер выглядит так:

283
WPF Ухудшение качества текста при наличии BlurShadowEffect у родителя

WPF Ухудшение качества текста при наличии BlurShadowEffect у родителя

Приведу незатейливый код, демонстрирующий проблему:

310
Запуск desktop-приложения с передаваемыми параметрами

Запуск desktop-приложения с передаваемыми параметрами

Есть два desktop-приложения: launcher, который позволяет менять параметры второй программы, и cleaner, которой и передаются эти параметрыНеобходимо...

260
Unity3d ошибка с переключением камер?

Unity3d ошибка с переключением камер?

При запуске unity выдает такую ошибку -

340