Hello 大家好,没错,作为一枚新手 ruby 菜鸟以及 HTML 小白,我又来了。。。
今天想问大家一个问题: 如何使用 ruby gem 中的 restclient 来登陆一个网页,并返回登陆后的界面。 或者大家有其他好方法,可以达到这个目的。 前提是:用命令行执行脚本,不能用模拟打开浏览器的方法,类似 waitri-webdriver。服务器端没有浏览器可以用(或者我小白,还不知道?) 麻烦各位大神了。 下面是我用 restclient 的过程中遇到的问题。
====================================分割线=========================================
模拟登陆 Ruby China 社区 上图是用 firebug 查看到的 post 请求的参数,根据参数写出 post 登陆代码。
代码如下:
require 'rubygems'
require 'restclient'
LOGIN_URL = "https://ruby-china.org/account/sign_in"
page = RestClient.post(LOGIN_URL, {'user[login]'=>'xxxx', 'user[password]'=>'xxxx', 'user[remember_me]'=>'0', 'commit'=>'登录', 'utf8'=>'✓', 'authenticlty_token'=>'xxxxxxxxxxxxxxxxxxxxxxxx'})
这里会报一个如下的错误: gems/ruby-2.2-head/gems/rest-client-1.8.0/lib/restclient/abstract_response.rb:65:in `return!': 302 Found (RestClient::Found) 网页我写的参数通过了,但是网页没有跳转到我想要的结果去。
我在网上查了一下,看到一段 java 代码说要根据重定向返回的 response 来 get 新的页面。我又写了如下代码:
require 'rubygems'
require 'restclient'
LOGIN_URL = "https://ruby-china.org/account/sign_in"
page = RestClient.post(LOGIN_URL, {'user[login]'=>'xxxx', 'user[password]'=>'xxxx', 'user[remember_me]'=>'0', 'commit'=>'登录', 'utf8'=>'✓', 'authenticlty_token'=>'xxxxxxxxxxxxxxxxxxxxxxxx'}) {|response, request, result, &block|
if [301, 302, 307].include? response.code
#response.follow_redirection(request, result, &block)
puts response.cookies
else
response.return!(request, result, &block)
end
}
但是会提示我 instance variable @cookie_jar not initialized 应该是没拿到 cookie。
可以显示到 response.headers,这里面有个链接 用 response.headers[:location] 可以拿到,但是用 get 方法打开这个链接后,我发现还是登陆前的页面。
====================================分割线=========================================
求助!求助!感激不尽!