require "net/http"
require "net/https"
require "erb"
require "singleton"
PANEL = 'panel.dreamhost.com'
PATH = '/index.cgi'
USERAGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1'
class Panel
include Singleton
def Panel.login(webid, password)
unless @headers.nil?
raise ScriptError, "You should already be logged in!"
end
@http = Net::HTTP.new(PANEL, 443)
@http.use_ssl = true
resp, data = @http.get2(PATH, {'User-Agent' => USERAGENT})
cookie = resp.response['set-cookie'].split('; ')[0]
#主要它应付了有些网站需要cookie的要求
data = "Nscmd=Nlogin&username=#{ERB::Util.url_encode(webid)}&password=#{ERB::Util.url_encode(password)}&submit=Log%20In"
@headers = {
'Cookie' => cookie,
'Referer' => 'https://'+PANEL+PATH,
'Content-Type' => 'application/x-www-form-urlencoded',
'User-Agent' => USERAGENT
}
puts "headers = " + @headers.inspect
resp, data = @http.post2(PATH, data, @headers)
# Output on the screen -> we should get either a 302 redirect (after a successful login) or an error page
puts 'Code = ' + resp.code
puts 'Message = ' + resp.message
resp.each {|key, val| puts key + ' = ' + val}
puts data
end
end
调用
Panel.login("kenlistian", "password")
摘自老外的片段,学习用。