0

我正在尝试从 Kentico CMS 访问 REST 接口,但我似乎无法在我的 Rails 应用程序中正确访问它。我可以在浏览器中访问它,然后我会弹出一个用户名/密码验证框,然后在输入正确的凭据后返回 JSON。

在我的 Rails 应用程序中,我正在使用rest-client并尝试通过以下方式访问:

username = 'username_here'
password = 'password_here'
page_url = 'page_url_here'

resource = RestClient::Resource.new(page_url, :username => username, :password => password)
response = resource.get

也试过:

resource = RestClient::Resource.new(page_url)
resource.head :Authorization => Base64.encode64(username) + ":" + Base64.encode64(password)
response = resource.get

两者都给我一个连接被拒绝的错误。Kentico 的文档说,每个请求都需要发送一个授权标头,如下所示:

Authorization: Basic <enter Base64-encoded <username>:<password> here>

所以我假设我不能正确发送标头,或者可能是 rest-client gem 不能胜任这项任务。我愿意使用其他宝石或完全不同的方法。任何帮助表示赞赏!

编辑:

通过将第二个示例更改为以下内容,我能够摆脱连接被拒绝错误:

resource = RestClient::Resource.new(page_url)
resource.head :Authorization => "Basic " + Base64.encode64("%s:%s" % [username, password])

但是,我现在收到 405 Method Not Allowed 错误。浏览器发送的标题中是否还有其他内容,而不是rest-client?

4

2 回答 2

1

我做了更多的谷歌搜索,发现 RestClient 只是 Net::HTTP 标准库的包装器。

http://www.ruby-forum.com/topic/1648618

向下滚动此页面更多,我发现我正在寻找进行基本身份验证的内容:

uri = URI('http://example.com/index.html?key=value')

req = Net::HTTP::Get.new(uri.request_uri)
req.basic_auth 'user', 'pass'

res = Net::HTTP.start(uri.hostname, uri.port) {|http|
  http.request(req)
}
puts res.body

对我来说,这比试图弄清楚如何让 RestClient 做你想做的事情要容易得多。希望这可以帮助将来的其他人不要像我一样浪费时间:)

于 2012-12-11T21:32:54.613 回答
0

我相信第一个例子应该是

resource = RestClient::Resource.new(page_url, :user => username, :password => password)
response = resource.get

那是user而不是username

于 2012-12-11T20:30:09.360 回答