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

2007-03-6 6:25 PM
comments/trackbacks(7) | permalink