C# Httpclient编程

时间:2023-03-09 09:12:38
C# Httpclient编程
今天研究了一天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", "");
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>)
{
strCookie = strCookies[].Substring(, strCookies[].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;
}
} 顶