Skip to content

Instantly share code, notes, and snippets.

@misodengaku
Created April 20, 2013 16:16
Show Gist options
  • Save misodengaku/5426484 to your computer and use it in GitHub Desktop.
Save misodengaku/5426484 to your computer and use it in GitHub Desktop.
UNIPA殴るコード
require 'nokogiri'
require_relative 'open-uri-post.rb'
require 'cgi'
require 'net/http'
USERNAME = "username"
PASSWORD = "password"
$USERAGENT = "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)"
def GetRequest(uri, _cookies)
result = ""
cookies = _cookies.map{|k,v| "#{k}=#{v}"}.join(';')
req = open(uri, {
"User-Agent" => $USERAGENT ,
'Connection' => "keep-alive",
"Cookie" => cookies,
:redirect => false
}) { |f|
result += f.read
if f.meta['set-cookie'] != nil then
f.meta['set-cookie'].scan(/([a-zA-Z_-]+)=([^;\s]+);/){
_cookies[$1] = $2
}
end
}
p result
return result
end
#----------------------POSTリクエストを実行----------------------
def PostRequest(uri, params, _cookies)
#パラメータをURLエンコード
result = ""
cookies = _cookies.map{|k,v| "#{k}=#{v}"}.join(';')
#p cookies
#params = CGI.escape(params)
#リクエスト作成
begin
req = open(uri, {
"User-Agent" => $USERAGENT ,
"Referer" => "http://portal.sa.dendai.ac.jp/up/faces/login/Com00505A.jsp",
'Connection' => "keep-alive",
"Cookie" => cookies,
"postdata" => params,
:redirect => false
}) { |f|
result += f.read
if f.meta['set-cookie'] != nil then
f.meta['set-cookie'].scan(/([a-zA-Z_-]+)=([^;\s]+);/){
_cookies[$1] = $2
}
else
print "Cookie not found\n"
end
}
rescue OpenURI::HTTPRedirect => redirect
#p redirect.uri.to_s
redirect.io.meta['set-cookie'].scan(/([a-zA-Z_-]+)=([^;\s]+);/){
_cookies[$1] = $2
}
return redirect.uri.to_s
end
return result
end
#----------------------ページに埋めこまれているセッションを取得----------------------
def GetSessionID(srchtml)
session_id = ""
doc = Nokogiri::HTML(srchtml)
q = doc.xpath("//input[@id='com.sun.faces.VIEW']").map { |e| session_id = e["value"] }
#session_id = q.first['value']
return session_id
end
#----------------------Cookieをパース----------------------
def parse_cookie(set_cookie, uri)
require 'uri'
uri = URI.parse(uri) unless uri.kind_of?(URI)
cookies = Array.new
cookie = nil
values = set_cookie.gsub(/\s*expires\s*=\s*(.*?,.*?)\s*(,|;|$)/) { 'expires=' + [$1].pack('m').chomp + $2 }.split(/\s*(?:;|,)\s*/)
values.each do |v|
match = v.match(/^\s*(.*?)\s*=\s*(.*?)\s*$/)
unless match.nil?
name = match[1]
value = match[2]
# puts name + ':' + value
if name.match(/domain/i)
cookie.domain = value unless cookie.nil?
elsif name.match(/path/i)
cookie.path = value unless cookie.nil?
elsif name.match(/expires/i)
cookie.expires = value.unpack('m').shift unless cookie.nil?
else
cookie = CGI::Cookie.new(name, value)
cookie.path = uri.path
cookie.domain = uri.host
cookie.expires = nil
cookie.secure = false
cookies.push(cookie)
end
else
cookie.secure = true if not cookie.nil? and v.match(/^\s*secure\s*$/i)
# puts v
end
end
return cookies
end
#----------------------main-----------------------
cookie = {}
#セッションID取得
url = "http://portal.sa.dendai.ac.jp/up/faces/login/Com00505A.jsp"
body = ""#GetRequest(url)
#cookie_str = body.meta['set-cookie']cookie = {}
Net::HTTP.start('portal.sa.dendai.ac.jp'){|http|
response = http.get('/up/faces/login/Com00505A.jsp', {
'User-Agent' => "#{$USERAGENT}",
'Connection' => "keep-alive"
} )
response.get_fields('Set-Cookie').each{|str|
k,v = str[0...str.index(';')].split('=')
cookie[k] = v
}
body = response.body
}
cookies = cookie
#cookies = cookie.map{|k,v| "#{k}=#{v}"}.join(';')
SessionID = CGI.escape(GetSessionID(body))
#p cookie.map
print SessionID
print "\n"
#----------------------認証----------------------
url = "http://portal.sa.dendai.ac.jp/up/faces/login/Com00505A.jsp"
params = "form1%3AhtmlUserId=#{USERNAME}&"
params += "form1%3AhtmlPassword=#{PASSWORD}&"
params += "form1%3Alogin.x=26&form1%3Alogin.y=0&"
params += "com.sun.faces.VIEW=#{SessionID}&form1=form1"
p params
for num in 0..15 do
cookies.map{|x| p x}
html = PostRequest(url, params, cookies)
if html.to_s.start_with?("http") then
#print "redirected!\n"
cookies.map{|x| p x}
html = GetRequest(html.to_s, cookies)
body = Nokogiri::HTML(html)
#p html
doc = body.xpath("//div[@id='menubox']")
if doc.size >0 then
#ログイン成功
break
else
#ログイン失敗
p "failed"
sleep(0.5)
end
else
#失敗
p "failed"
sleep(0.5)
end
end
p "Login Success!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment