今天研究了一天C#如何添加cookie到httpcient裡面,從而發請求時,能把cookie作為頭部發出,最後發現根本加不進去。
Httpclient的cookie是來自上一個請求的響應,httpclient會自動把上一個請求的響應裡面的cookie儲存起來,所以當發送幾個有關聯的request,就必須要用同一個Httpclient
樣本:
//第一個請求
HttpClient client = new HttpClient();
// 為JSON格式添加一個Accept前序
//client.DefaultRequestHeaders.Accept.Add(
// new MediaTypeWithQualityHeaderValue("application/json"));
string strDecodeBody = HttpUtility.UrlEncode(strBody);
HttpContent content = new StringContent(strDecodeBody);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
client.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0");
client.DefaultRequestHeaders.Add("Authentication", "123");
HttpResponseMessage response = null;
response = client.PostAsync(strIP, content).Result;
if (response != null)
{
if (expectCode == HttpStatusCode.OK)
{
var resultValue = response.Content.ReadAsStringAsync().Result;
string strResponse = HttpUtility.UrlDecode(resultValue.ToString());
string[] strCookies = (string[])response.Headers.GetValues("Set-Cookie");
if(strCookies.Length>0)
{
strCookie = strCookies[0].Substring(0, strCookies[0].IndexOf(';'));
}
}
}
//第二個請求,在這個請求裡,沒有設定cookie,由於跟第一個請求使用相同httpclient,所以cookie會自動放入要求標頭部發給伺服器
string strEncodeBody = HttpUtility.UrlEncode(strBody);
HttpContent content = new StringContent(strEncodeBody);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
HttpResponseMessage response = null;
response = client.PostAsync(strIP, content).Result;
if (response != null)
{
if (expectCode == HttpStatusCode.OK)
{
var resultValue = response.Content.ReadAsStringAsync().Result;
string strResponse = HttpUtility.UrlDecode(resultValue.ToString());
return strResponse;
}
}