Pergunta

Eu estou tentando fazer logon em um site usando .NET 4.5 HttpClient e receber um cookie.Eu quebro a direita antes de sair, tente e veja o CookieContainer e não contém nenhum tipo de cookies.A resposta envia de volta um status 200 embora.

private async void Login(string username, string password)
{
    try
    {
        Uri address = new Uri(@"http://website.com/login.php");
        CookieContainer cookieJar = new CookieContainer();
        HttpClientHandler handler = new HttpClientHandler()
        {
            CookieContainer = cookieJar
        };
        handler.UseCookies = true;
        handler.UseDefaultCredentials = false;
        HttpClient client = new HttpClient(handler as HttpMessageHandler)
        {
            BaseAddress = address
        };

        HttpContent content = new StringContent(string.Format("username={0}&password={1}&login=Login&keeplogged=1", username, password));
        HttpResponseMessage response = await client.PostAsync(client.BaseAddress, content);
    }

Eu não tenho nenhuma idéia de por que isso não está funcionando.Ele funciona bem quando eu tento .NET 4 de estilo.

Foi útil?

Solução

Utilização FormUrlEncodedContent em vez de StringContent com seqüência de caracteres.Formato.O seu código não corretamente escapar o nome de usuário e senha.

HttpContent content = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("username", username),
    new KeyValuePair<string, string>("password", password),
    new KeyValuePair<string, string>("login", "Login"),
    new KeyValuePair<string, string>("keeplogged", "1")
});
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top