使用 Mechanize 获取 ASP.NET 个身份验证 cookie
Get ASP.NET authentication cookies with Mechanize
我正在尝试使用 Ruby Mechanize 以编程方式在 ASP.NET 站点上登录并建立会话。问题是我似乎无法获取 login/authentication 所需的三个 cookie。
例如,当使用普通浏览器时,如Chrome,浏览器向带有用户名和密码的登录表单发出POST请求后,会设置三个cookie:
ASPXAUTH
ASP.NET_SessionId
UserName
当使用 Mechanize 尝试登录时,提交登录表单后,Mechanize 代理的 Mechanize::CookieJar
仅包含一个 cookie:ASP.NET_SessionID
.
这显然会导致登录后对页面的任何后续请求失败,并抱怨 "The session is expired" 和 "please sign in again."
我是否可以通过编程方式获取另外两个 cookie?它不一定必须通过 Mechanize,但必须有某种方式将此 cookie 传递给它。
事实证明,一些(大多数)ASP.NET 按钮点击是通过 Javascript 处理的。当前版本的 Mechanize (2.7) 不支持 Javascript 交互。我切换到 Capybara WebKit 作为无头驱动程序。然后我能够与我需要的按钮进行交互。
我正在尝试使用 Ruby Mechanize 以编程方式在 ASP.NET 站点上登录并建立会话。问题是我似乎无法获取 login/authentication 所需的三个 cookie。
例如,当使用普通浏览器时,如Chrome,浏览器向带有用户名和密码的登录表单发出POST请求后,会设置三个cookie:
ASPXAUTH
ASP.NET_SessionId
UserName
当使用 Mechanize 尝试登录时,提交登录表单后,Mechanize 代理的 Mechanize::CookieJar
仅包含一个 cookie:ASP.NET_SessionID
.
这显然会导致登录后对页面的任何后续请求失败,并抱怨 "The session is expired" 和 "please sign in again."
我是否可以通过编程方式获取另外两个 cookie?它不一定必须通过 Mechanize,但必须有某种方式将此 cookie 传递给它。
事实证明,一些(大多数)ASP.NET 按钮点击是通过 Javascript 处理的。当前版本的 Mechanize (2.7) 不支持 Javascript 交互。我切换到 Capybara WebKit 作为无头驱动程序。然后我能够与我需要的按钮进行交互。