Подтвердить что ты не робот

HttpClient не хранит файлы cookie в CookieContainer

Я использую VS2010 + .NET 4.0 + System.Net.Http (от Nuget).

По какой-то причине, которую мне не удается понять, cookie сеанса, который я получаю в моем HttpResponseMessage, не сохраняется автоматически в HttpClient CookieContainer. Вот как выглядит мой код:

CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);

Uri site = new Uri("https://www.mywebsite.com");
var response1 = client.SendAsync(new HttpRequestMessage(HttpMethod.Get,site)).Result;

В заголовках ответов я вижу, что у меня есть следующее:

Set-Cookie: JSESSIONID=FC8110E434C2C6DAB78B4E335024A639; Path=/member; Secure

Однако мой контейнер cookie остается пустым... почему?

4b9b3361

Ответ 1

Я думаю, проблема в том, что ваши файлы cookie безопасны. Проблема в том, что CookieContainer не будет отправлять безопасные файлы cookie обратно на сервер в последующих HTTP-запросах. Это может быть ошибка, или, возможно, у нее есть некоторые причины.

Обходной путь заключается в том, чтобы вручную добавить cookie в CookieContainer. Таким образом, cookie будет отправлен обратно в заголовке HTTP-запроса, поскольку при отправке файлов cookie на сервер не будет определено никакой безопасности.

Подробнее см. в этой статье.

Ответ 2

Используйте этот кусок кода для извлечения файлов cookie из ответа:

/// <summary>
/// Read web cookies
/// </summary>
public static CookieContainer ReadCookies(this HttpResponseMessage response)
{
    var pageUri = response.RequestMessage.RequestUri;

    var cookieContainer = new CookieContainer();
    IEnumerable<string> cookies;
    if (response.Headers.TryGetValues("set-cookie", out cookies))
    {
        foreach (var c in cookies)
        {
            cookieContainer.SetCookies(pageUri, c);
        }
    }

    return cookieContainer;
}