问题:我正在尝试使用httpclient从site.Now中获取数据,该站点要求您首先访问一个链接,然后只有您可以将数据发布到下一个链接。Link1是一个简单的get请求,Link2是一个post请求,现在我认为该站点首先从link1中存储一些cookie,然后才允许您将数据发布到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();
}但是我得到了会话超时错误消息。如何维护httpClient中持续从python中的web.Like接收到的会话的cookie
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar()))
urllib2.install_opener(opener)Link1
Link2
发布于 2017-01-11 20:24:45
您可以使用CookieContainer为您处理cookies。
这样做,您就可以像这样创建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));(注意,它使用了HttpClient在System.Net.Http中的版本)
发布于 2017-01-11 20:25:07
因此,在第一个响应之后,就有了Set-Cookie头:
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);https://stackoverflow.com/questions/41599384
复制相似问题