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

WebClient Не автоматически перенаправляет

При регистрации процесса входа в систему с использованием Firebug я вижу, что это похоже на

POST //The normal post request
GET //Automatically made after the login
GET //Automatically made after the login
GET //Automatically made after the login

При создании почтового запроса, используя мой код ниже, он не делает автоматические запросы GET, которые делают браузеры.

MY WebClient Handler

using System;
using System.Net;

namespace Test
{
    class HttpHandler : WebClient
    {
        private CookieContainer _mContainer = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address)
        {
            var request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = _mContainer;
            }
            return request;
        }

        protected override WebResponse GetWebResponse(WebRequest request)
        {
            var response = base.GetWebResponse(request);
            if (response is HttpWebResponse)
                _mContainer.Add((response as HttpWebResponse).Cookies);
            return response;
        }

        public void ClearCookies()
        {
            _mContainer = new CookieContainer();
        }
    }
}

Использование кода

private static async Task<byte[]> LoginAsync(string username, string password)
{
    var postData = new NameValueCollection();
    var uri = new Uri(string.Format("http://{0}/", ServerName));

    postData.Add("name", username);
    postData.Add("password", password);

    return await HttpHandler.UploadValuesTaskAsync(uri, postData);
}

При попытке отслеживать подключение моего приложения он выполняет только запрос POST, а не остальные запросы GET. [ЭТО ПРОИЗВОДИТ АВТОМАТИЧЕСКИ В ПРОСМОТРЕ]

4b9b3361

Ответ 1

Это не должно удивлять, учитывая, что HttpWebRequest не является браузером. Если вам нужно выполнить эти переадресации, тогда проверьте HttpWebResponse.StatusCode и выполните другой запрос, если он код перенаправления в 300-х годах. Примечание по ссылке ниже 10.3 Перенаправление 3xx:

Этот класс кода состояния указывает, что пользовательский агент должен предпринять дополнительные действия для выполнения запроса. Необходимое действие МОЖЕТ быть выполнено пользовательским агентом без взаимодействия с пользователем, если и только если метод, используемый во втором запросе, является GET или HEAD. Клиент ДОЛЖЕН обнаруживать бесконечные петли перенаправления, поскольку такие петли генерируют сетевой трафик для каждого перенаправления.

Ответ 2

Попробуйте добавить

request.AllowAutoRedirect = true;

прямо под

var request = base.GetWebRequest(address);

Он решил какую-то аналогичную проблему для меня, даже если предполагается, что autoredirect будет включен по умолчанию.