Httpclient Cookie 问题
Httpclient Cookie Issue
问题:我正在尝试使用 httpclient 从 site.Now 站点获取数据,该站点要求您首先访问 link,然后您才能 post 将数据传输到下一个 link。
Link1 是一个简单的 get 请求
Link2 是一个 post 请求
现在我认为该站点首先存储一些来自 link1 的 cookie,然后只允许您将 post 数据发送到 link2,因为每当我尝试打开 link2 时隐身站点显示错误消息“会话超时或达到最大连接限制。无法继续。请关闭并重新启动浏览器”
现在我试过了:
try
{
//Send the GET request
httpResponse = await httpClient.GetAsync(new Uri(link1UriString));
//Send the POSTrequest
httpResponse = await httpClient.PostAsync(new Uri(link2uriString),postContent);
httpResponseBody = await httpResponse.Content.ReadAsStringAsync();
}
但我收到会话超时错误消息。如何维护从 python 中的 web.Like 连续接收到的 httpClient 会话的 cookie,可以通过
完成
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
您可以使用 CookieContainer
为您处理 cookie。
这样做,您将像这样创建 HttpClient。
using System.Net;
using System.Net.Http;
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient httpClient = new HttpClient(handler);
httpResponse = await httpClient.GetAsync(new Uri(link1UriString));
(注意使用System.Net.Http中的HttpClient版本)
所以,在第一次回复后你有 Set-Cookie
header:
var responseMessage = await httpClient.GetAsync("http://115.248.50.60/registration/Main.jsp?wispId=1&nasId=00:15:17:c8:09:b1");
IEnumerable<string> values;
var coockieHeader = string.Empty;
if (responseMessage.Headers.TryGetValues("set-cookie", out values))
{
coockieHeader = string.Join(string.Empty, values);
}
之后,只需将您的 cookie 设置到请求消息中:
var httpRequestMessage = new HttpRequestMessage
{
RequestUri = new Uri("http://115.248.50.60/registration/chooseAuth.do"),
Content = postContent,
Method = HttpMethod.Post
};
httpRequestMessage.Headers.Add("Cookie", values);
var httpResponse = await httpClient.SendAsync(httpRequestMessage);
问题:我正在尝试使用 httpclient 从 site.Now 站点获取数据,该站点要求您首先访问 link,然后您才能 post 将数据传输到下一个 link。 Link1 是一个简单的 get 请求 Link2 是一个 post 请求 现在我认为该站点首先存储一些来自 link1 的 cookie,然后只允许您将 post 数据发送到 link2,因为每当我尝试打开 link2 时隐身站点显示错误消息“会话超时或达到最大连接限制。无法继续。请关闭并重新启动浏览器” 现在我试过了:
try
{
//Send the GET request
httpResponse = await httpClient.GetAsync(new Uri(link1UriString));
//Send the POSTrequest
httpResponse = await httpClient.PostAsync(new Uri(link2uriString),postContent);
httpResponseBody = await httpResponse.Content.ReadAsStringAsync();
}
但我收到会话超时错误消息。如何维护从 python 中的 web.Like 连续接收到的 httpClient 会话的 cookie,可以通过
完成 opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)
您可以使用 CookieContainer
为您处理 cookie。
这样做,您将像这样创建 HttpClient。
using System.Net;
using System.Net.Http;
CookieContainer cookies = new CookieContainer();
HttpClientHandler handler = new HttpClientHandler();
handler.CookieContainer = cookies;
HttpClient httpClient = new HttpClient(handler);
httpResponse = await httpClient.GetAsync(new Uri(link1UriString));
(注意使用System.Net.Http中的HttpClient版本)
所以,在第一次回复后你有 Set-Cookie
header:
var responseMessage = await httpClient.GetAsync("http://115.248.50.60/registration/Main.jsp?wispId=1&nasId=00:15:17:c8:09:b1");
IEnumerable<string> values;
var coockieHeader = string.Empty;
if (responseMessage.Headers.TryGetValues("set-cookie", out values))
{
coockieHeader = string.Join(string.Empty, values);
}
之后,只需将您的 cookie 设置到请求消息中:
var httpRequestMessage = new HttpRequestMessage
{
RequestUri = new Uri("http://115.248.50.60/registration/chooseAuth.do"),
Content = postContent,
Method = HttpMethod.Post
};
httpRequestMessage.Headers.Add("Cookie", values);
var httpResponse = await httpClient.SendAsync(httpRequestMessage);