Войдите в веб-сайт и используйте cookie для получения источника для другой страницы

Я пытаюсь войти в телевизионный веб-сайт Гнева и получить исходный код страницы My Shows. Я успешно вхожу в систему (я проверил ответ от своего запроса сообщения), но затем когда я пытаюсь выполнить получить запрос на странице My Shows, я перенаправляюсь к странице входа в систему.

Это - код, который я использую к входу в систему:

    private string LoginToTvRage()
    {
        string loginUrl = "http://www.tvrage.com/login.php";
        string formParams = string.Format("login_name={0}&login_pass={1}", "xxx", "xxxx");
        string cookieHeader;
        WebRequest req = WebRequest.Create(loginUrl);
        req.ContentType = "application/x-www-form-urlencoded";
        req.Method = "POST";
        byte[] bytes = Encoding.ASCII.GetBytes(formParams);
        req.ContentLength = bytes.Length;
        using (Stream os = req.GetRequestStream())
        {
            os.Write(bytes, 0, bytes.Length);
        }
        WebResponse resp = req.GetResponse();
        cookieHeader = resp.Headers["Set-cookie"];
        String responseStream;
        using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
        {
            responseStream = sr.ReadToEnd();
        }
        return cookieHeader;
    }

Я затем передаю cookieHeader в этот метод, который должен получать источник страницы My Shows:

    private string GetSourceForMyShowsPage(string cookieHeader)
    {
        string pageSource;
        string getUrl = "http://www.tvrage.com/mytvrage.php?page=myshows";
        WebRequest getRequest = WebRequest.Create(getUrl);
        getRequest.Headers.Add("Cookie", cookieHeader);
        WebResponse getResponse = getRequest.GetResponse();
        using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
        {
            pageSource = sr.ReadToEnd();
        }
        return pageSource;
    }

Я использовал этот предыдущий вопрос в качестве руководства, но я в замешательстве относительно того, почему мой код не работает.

5
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

Вот упрощенная и рабочая версия вашего кода с использованием WebClient:

class Program
{
    static void Main()
    {
        var shows = GetSourceForMyShowsPage();
        Console.WriteLine(shows);
    }

    static string GetSourceForMyShowsPage()
    {
        using (var client = new WebClientEx())
        {
            var values = new NameValueCollection
            {
                { "login_name", "xxx" },
                { "login_pass", "xxxx" },
            };
            // Authenticate
            client.UploadValues("http://www.tvrage.com/login.php", values);
            // Download desired page
            return client.DownloadString("http://www.tvrage.com/mytvrage.php?page=myshows");
        }
    }
}

/// <summary>
/// A custom WebClient featuring a cookie container
/// </summary>

public class WebClientEx : WebClient
{
    public CookieContainer CookieContainer { get; private set; }

    public WebClientEx()
    {
        CookieContainer = new CookieContainer();
    }

    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = base.GetWebRequest(address);
        if (request is HttpWebRequest)
        {
            (request as HttpWebRequest).CookieContainer = CookieContainer;
        }
        return request;
    }
}
16
ответ дан 18 December 2019 в 10:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: