我需要登录网站并执行操作。该网站基于 REST,因此我可以通过此操作轻松登录(登录信息作为查询字符串包含在 URL 中,因此我不需要设置凭据):
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 分配给新请求。但由于某种原因,这似乎不起作用。我收到一条错误消息,告诉我“我的会话已超时或过期”,这是一个接一个地完成的,所以这不是时间问题。
我使用 Fiddler 检查 HTTP 标头,但我发现这很困难,因为这是 HTTPS。(我知道我可以解密它,但似乎效果不佳。)
我可以为这个休息服务获取我的 URL 并将它们粘贴到 firefox 中,一切正常,所以它一定是我做错了,而不是连接的另一端。
我对 HTTPS 不是很熟悉。我需要做其他事情来维持我的会话吗?我认为cookie就是它,但也许我需要在两个请求中维护其他东西?
这是我发送第一个请求时返回的标头(除了我更改了 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
任何帮助将不胜感激,我已经没有想法了。