C # metro httpclient no recibir cookie en postsync
-
11-12-2019 - |
Pregunta
Estoy tratando de iniciar sesión en un sitio web usando .NET 4.5 HTTPClient y recibe una cookie.Me rompo justo antes de dejar el intento y revisar la cookieContainer y no contiene cookies.Sin embargo, la respuesta envía un estado de 200.
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);
}
No tengo ni idea de por qué esto no funciona.Funciona bien cuando lo intento .NET 4 estilo.
Solución
Use FormurlencodedContent en lugar de StringContent con string.Format .Su código no escapa correctamente el nombre de usuario y la contraseña.
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 bajo: CC-BY-SA con atribución
No afiliado a StackOverflow