Created
April 20, 2013 16:16
-
-
Save misodengaku/5426484 to your computer and use it in GitHub Desktop.
UNIPA殴るコード
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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