代码之家  ›  专栏  ›  技术社区  ›  Chris McCauley

net::http::unauthorized-如何在www-authenticate头上获取?

  •  0
  • Chris McCauley  · 技术社区  · 14 年前

    给出下面的代码…

    Net::HTTP.start('localhost', 4000) do |http|
        #
        #   usual stuff omitted for clarity
        #
        @response = http.request(req)
    end
    

    …如果(行为良好的)服务器返回401(未经授权的)响应,如何在www_authenticate头上获取?

    我得到的最好的解决方案一点都不好…

    class Net::HTTPUnauthorized
        def get_header(h)
            _return = nil
    
            target = h.upcase
    
            self.header.each_header do |k, v|
                if k.upcase == target
                    _return = v
                    break
                end
            end
    
            _return
        end
    end
    

    克里斯

    1 回复  |  直到 14 年前
        1
  •  2
  •   James A. Rosen    14 年前

    一种选择是使用 halorgium's Rack-Client ,哪个包裹 Net::HTTP 带有机架端点。然后,您将与远程服务器进行交互,就像它是一个机架应用程序一样:

    response = Rack::Client.get("http://localhost:4000/foo/bar.baz")
    response.code
    # => 401
    response.headers['WWW-Authenticate']
    # => 'Basic realm="Control Panel"'