ruby-openid 1.1.4 3XX ¸®´ÙÀÌ·ºÆ®½Ã ¿À·ù ¼öÁ¤
OpenID Enabled¿¡¼ ¹èÆ÷ÇÏ´Â ·çºñ¿ë ¿ÀǾÆÀ̵ð ¶óÀ̺귯¸® ruby-openid 1.1.4¿¡´Â ¿ÀǾÆÀ̵𠼹ö°¡ 3XX redirect¸¦ ÀÀ´äÇÑ °æ¿ì Çì´õÀÇ Location Çʵ忡 ÁöÁ¤µÈ URL·Î ¸®´ÙÀÌ·ºÆ®ÇÏ´Â ±â´ÉÀÌ Æ÷ÇԵǾî ÀÖ´Ù.
status code 3xx·Î ¸®´ÙÀÌ·ºÆ® ÇÏ´Â °æ¿ì Location Çʵ忡 ÁöÁ¤µÈ URLÀÌ »ó´ëÁÖ¼Ò(¿¹¸¦ µé¾î /dir/file, dir/file µî)·Î ÁöÁ¤µÈ °æ¿ì ¿ÀǾÆÀ̵ð Á¦°øÀÚ¸¦ ãÀ» ¼ö ¾ø´Ù´Â ¿¡·¯¸¦ ¹ß»ý½ÃŲ´Ù.
½ºÆå¿¡´Â ¾î¶»°Ô µÇÀÖ´ÂÁö ¸ð¸£°ÚÁö¸¸ ÀÌ·± ¹®Á¦·Î °í°´ÀÌ ·Î±×ÀÎÀ» ÇÒ ¼ö ¾ø´Ù¸é ¼ºñ½ºÁ¦°øÀڷμ´Â ¾Ö°¡Å» ÀÏÀÌ´Ù.
´ÙÀ½°ú °°ÀÌ ruby-openid ¶óÀ̺귯¸®ÀÇ ÀϺθ¦ ¼öÁ¤ÇØ ÀÌ¿Í °°Àº ¹®Á¦¸¦ ÇÇÇÒ ¼ö ÀÖ¾ú´Ù.
ruby-openid ¶óÀ̺귯¸® ±¸¼ºÆÄÀÏÁß fetcher.rb ÆÄÀÏÀÇ do_get ¸Þ¼Òµå¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÑ´Ù.
# do a GET following redirects limit deep
def do_get(url, params, limit=5)
if limit == 0
return nil
end
begin
uri = URI.parse(url)
http = get_http_obj(uri)
resp = http.request_get(uri.request_uri, params)
rescue
nil
else
case resp
when Net::HTTPSuccess
return [resp, URI.parse(url).to_s]
when Net::HTTPRedirection
redirect_url = resp["location"]
if redirect_url !~ /^http/
url_header = url.match(/^((http|https):\/\/(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+)/)[0]
if redirect_url =~ /^\//
redirect_url = url_header + redirect_url
else
redirect_url = url + redirect_url
end
end
return do_get(redirect_url, params, limit-1)
else
return nil
end
end
end
def do_get(url, params, limit=5)
if limit == 0
return nil
end
begin
uri = URI.parse(url)
http = get_http_obj(uri)
resp = http.request_get(uri.request_uri, params)
rescue
nil
else
case resp
when Net::HTTPSuccess
return [resp, URI.parse(url).to_s]
when Net::HTTPRedirection
redirect_url = resp["location"]
if redirect_url !~ /^http/
url_header = url.match(/^((http|https):\/\/(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+)/)[0]
if redirect_url =~ /^\//
redirect_url = url_header + redirect_url
else
redirect_url = url + redirect_url
end
end
return do_get(redirect_url, params, limit-1)
else
return nil
end
end
end
