我需要登录到网站并执行操作。该网站是基于REST的,所以我可以做这个很容易登录(登录信息是作为在URL查询字符串,所以我dont't需要设置凭证):C#通过客户端上的HTTPS维护会话
CookieContainer cookieJar = new CookieContainer();
HttpWebRequest firstRequest = (HttpWebRequest) WebRequest.Create(loginUrl);
firstRequest.CookieContainer = cookieJar;
firstRequest.KeepAlive = true;
firstRequest.Method = "POST";
HttpWebResponse firstResponse = (HttpWebResponse)firstRequest.GetResponse();
这一工程,并记录了我我得到一个cookie来维护会话,它存储在上面显示的cookieJar中。然后我做了如下第二个请求:
HttpWebRequest secondRequest = (HttpWebRequest) WebRequest.Create(actionUrl);
secondRequest.Method = "POST";
secondRequest.KeepAlive = true;
secondRequest.CookieContainer = cookieJar;
WebResponse secondResponse = secondRequest.GetResponse();
我确保将cookie分配给新的请求。但由于某种原因,这似乎不起作用。我收到一个错误,告诉我“我的会话超时或过期”,并且这是一个接一个地完成的,所以它不是时间问题。
我使用提琴手检查HTTP标头,但我发现,因为这很难是HTTPS。 (我知道我可以解密它,但似乎不工作。)
我可以把我的网址的这个休息服务,并将它们粘贴到Firefox中,它一切正常,所以它必须是我在做的事情错误而不是连接的另一端。
我对HTTPS不是很熟悉。我需要做其他事情来维持我的会话吗?我认为cookie就是这样,但也许在这两个请求中我需要维护其他内容?
下面是当我在第一个请求发送的标头中返回(除非我改变,以保护无辜的饼干!):
X-DB-Content-length=19
Keep-Alive=timeout=15, max=50
Connection=Keep-Alive
Transfer-Encoding=chunked
Content-Type=text/html; charset=WINDOWS-1252
Date=Mon, 16 Nov 2009 15:26:34 GMT
Set-Cookie:MyCookie stuff goes here
Server=Oracle-Application-Server-10g
任何帮助,将不胜感激,我跑出来的想法。
微软似乎已经在.NET 4中修复了这个问题。 – Kelly 2010-06-28 22:02:41
您好凯利,我也面临一些会话过期,可能与您的情况类似,请您看看这个链接:http://stackoverflow.com/问题/ 22957840/crawling-session-expired谢谢 – bluewonder 2014-04-09 09:19:20