Ruby [已解决] 使用 Net::HTTP::basic_auth 实现登录的问题 (自动登录提交表单)

tylr · 2012年05月08日 · 最后由 tylr 回复于 2012年05月08日 · 6268 次阅读

我看这个页面都快 1 个小时了,照着范例做还是无法实现登录...特来求助 http://ruby-doc.org/stdlib-1.8.7/libdoc/net/http/rdoc/Net/HTTP.html

我的代码是: url = URI.parse('http://localhost/login.aspx') req = Net::HTTP::Post.new(url.path) req.basic_auth 'username'

由于这个页面只要输入正确用户名无需密码即可登陆,而 basic_auth 需要两个参数,用户名和密码,空缺密码会报错,用空字符串''代替虽不会报错但是貌似并未成功登陆,还望得到大家的指点,谢谢先~

简单点处理就是全部用 123456 作为密码

#1 楼 @huacnlee

url = URI.parse('http://localhost/login.aspx') req = Net::HTTP::Post.new(url.path) req.basic_auth 'username', '123456'

按照你的指引,我尝试了如上这段代码,但是还是没有给自动登录进去...

@tylr 忽略我的说法,我以为你是自己搞 BaseAuth 验证

浏览器中可以正常的 base auth ?

#4 楼 @vkill 是的,浏览器中简单,填入用户名,点击登录就进去了 我才开始学习 ruby,也不是很熟悉,不能太看出这段代码运行后抛出啥异常,运行后貌似一切正常

之所以我知道没有认证成功是因为,在这段代码的后面还跟了如下这段提交表单的代码 x = Net::HTTP.post_form(URI.parse("http://localhost/New.aspx"), params) puts x.body

而 puts 出来的结果就是被跳转到登录界面的 body

根据 stackoverflow 上童鞋的提示,我改用 mechanize 来做登录这块,代码如下

agent = Mechanize.new login_form = agent.get("http://localhost/login.aspx.form("form1""))

"form1" is the name of the login form

login_form.txtID = 'username'

"txtIT" is the name of the text field

agent.submit(login_form, login_form.buttons.first)

但还是不行,奇怪了,难道是 mechanize 我哪里没有用对?

一个上午了还没有解决这个问题,我再试试其他办法,如果是在不行只能试下 watir 了

agent = Mechanize.new form = agent.get("http://localhost/login.aspx.form("form1"")) do |f| f.txtID = 'sei44329' end.click_button

看了半天 mechanize 的文档,终于用上面这段代码搞定自动登录了,在 irb 中看到返回来登录后的页面数据那高兴啊,剩下看来也要继续用 mechanize 重写后半部分的表单提交部分代码了,因为貌似上面这段代码加上之前写好的提交代码无法配合着使用,运行后还是返回提示登录的界面

需要 登录 后方可回复, 如果你还没有账号请 注册新账号