private async Task<string> HttpPost(string url, Dictionary<string, string> parameters, CookieContainer cookieContainer)
{
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookieContainer;
HttpClient client = new HttpClient(handler);
HttpContent content = new FormUrlEncodedContent(parameters);
HttpResponseMessage response = await client.PostAsync(url, content);
response.EnsureSuccessStatusCode();
// 保存响应中的Cookie信息
IEnumerable<string> cookieHeaders;
if (response.Headers.TryGetValues("Set-Cookie", out cookieHeaders))
{
foreach (string cookieHeader in cookieHeaders)
{
cookieContainer.SetCookies(new Uri(url), cookieHeader);
}
}
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
public async Task<string> HttpGet(string url, Dictionary<string, string> parameters, CookieContainer cookieContainer)
{
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookieContainer;
HttpClient client = new HttpClient(handler);
// 构建查询字符串
string queryString = string.Join("&", parameters.Select(p => $"{Uri.EscapeDataString(p.Key)}={Uri.EscapeDataString(p.Value)}"));
string urlWithQuery = $"{url}?{queryString}";
HttpResponseMessage response = await client.GetAsync(urlWithQuery);
response.EnsureSuccessStatusCode();
// 保存响应中的Cookie信息
IEnumerable<string> cookieHeaders;
if (response.Headers.TryGetValues("Set-Cookie", out cookieHeaders))
{
foreach (string cookieHeader in cookieHeaders)
{
cookieContainer.SetCookies(new Uri(url), cookieHeader);
}
}
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
应用:
CookieContainer cookieContainer = new CookieContainer();
// 创建一个新的Cookie对象
Cookie cookie = new Cookie("cookie_name", "cookie_value");
cookie.Domain = "example.com"; // 设置cookie的域名
// 将Cookie对象添加到CookieContainer中
cookieContainer.Add(cookie);
Dictionary<string, string> parameters = new Dictionary<string, string>()
{
{ "key1", "value1" },
{ "key2", "value2" }
};
string url = "https://example.com";
string response = await HttpGet(url, parameters, cookieContainer);