HTTP客户端Cookie c#
问题描述:
我想设置cookie并从一般方法获取cookie。我看到这个例子可行,但我在改变我自己的代码时遇到麻烦,因为我可以保留我的一般功能。HTTP客户端Cookie c#
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient client = new HttpClient(handler);
HttpResponseMessage response = client.GetAsync("http://google.com").Result;
Uri uri = new Uri("http://google.com");
IEnumerable<Cookie> responseCookies = cookies.GetCookies(uri).Cast<Cookie>();
foreach (Cookie cookie in responseCookies)
Console.WriteLine(cookie.Name + ": " + cookie.Value);
Console.ReadLine();
我的代码:
public static HttpClient CreateClientASMtoken(string tokenVal)
{
var httpClient = new HttpClient
{
BaseAddress = new Uri(urlASM)
};
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//httpClient.DefaultRequestHeaders.Accept.Add(new Cookie("token", tokenVal));
return httpClient;
}
注释代码是我改掉做到这一点的一个。我使用的其他一般方法是这样的:
public static async Task<HttpResponseMessage> PostASM(string path, object content)
{
string tokenVal = "d2GpEA5r8pwLRcOPxgaygPooldz2OZ2HUZzZ0YDPAOYCIiH4u5";
using (var client = CreateClientASMtoken(tokenVal))
{
var json = JsonConvert.SerializeObject(content);
var serializedContent = new StringContent(json, Encoding.UTF8, "application/json");
var postResponse = await client.PostAsync(path, serializedContent);
//string response = await postResponse.Content.ReadAsStringAsync();
return postResponse;
}
}
编辑: 我已经试过这太:
但它显示了一个错误,网址为OK,所以是令牌。 感谢提前:)
答
要添加一个cookie更改行:
//httpClient.DefaultRequestHeaders.Accept.Add(new Cookie("token", tokenVal));
到:
httpClient.DefaultRequestHeaders.Add("Set-Cookie", "token=test; path=/");
如果你不想路径部分先走一步,将其删除。
如果你想从HttpResponseMessage读出cookie,你需要自己处理解析。
这是一种方式来获得所有cookie:
HttpClient client = CreateClientASMtoken("");
HttpResponseMessage response = client.GetAsync("http://localhost").Result;
IEnumerable<string> rawCookies = response.Headers.GetValues("Set-Cookie");
试试吧,你会看到他们在相同的格式,当你将它们设置为。如前所述,您需要为自己解析它们,或者找一个班级为您做这件事。
答
我找到了一种轻松解决问题的方法。感谢那些贡献的人。
public static async Task<string> GetASM(string path)
{
string tokenVal = "d2GpEA5r8pwLRcOPxgaygPooldz2OZ2HUZzZ0YDPAOYCIiH4u5";
Uri uriASM = new Uri(urlASM);
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = uriASM })
{
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
{
cookieContainer.Add(uriASM, new Cookie("token", tokenVal));
var getResponse = await client.GetAsync(path);
return await getResponse.Content.ReadAsStringAsync();
}
}
}
嗨@FSDaniel我想你的建议,但不工作,要求是可以的,因为我受够了这种高枕无忧的应用程序进行测试和它的作品我代替“httpClient.DefaultRequestHeaders.Add(”曲奇“ ”标记=“ + tokenVal);”和一个不好的请求(如果cookie错误,服务器会回复它) – Antoine