C# HttpClient设置cookies的两种办法

通常有两种办法cookie

第一种handler.UseCookies=true(默认为true),默认的会本身带上cookies,例如session

var handler = new HttpClientHandler() { UseCookies = true };
var client = new HttpClient(handler);// { BaseAddress = baseAddress };
client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0");
client.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
client.DefaultRequestHeaders.Add("Keep-Alive", "timeout=600");
var content = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("email", "xxxx"),
                new KeyValuePair<string, string>("password", "xxxx"),
            });
var result = await client.PostAsync("https://www.xxxx.com/cp/login", content);
result.EnsureSuccessStatusCode();

这种状况post请求登录成功后,重定向到别的页面,也会自动带上cookies。若是把handler.UseCookies设置为false,登录后重定向的话不会自动带上cookies,则又会跳转到登录页面。post

 

第二种设置 handler.UseCookies = false时,则须要手动给headers上加入cookies.url

var handler = new HttpClientHandler() { UseCookies = false};
var client = new HttpClient(handler);// { BaseAddress = baseAddress };
var message = new HttpRequestMessage(HttpMethod.Get, url);
message.Headers.Add("Cookie", "session_id=7258abbd1544b6c530a9f406d3e600239bd788fb");
var result = await client.SendAsync(message);
result.EnsureSuccessStatusCode();

若是使用场景是:抓取须要登录后才能看到的网页数据,建议使用第一种,不须要设置任何cookies,httpclient会自动把登录后的cookies放置到后面的请求中。spa

相关文章
相关标签/搜索