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 が機能していない可能性があります。私は、他の宝石やまったく異なるアプローチを使用することにオープンです。どんな助けでも大歓迎です!

編集:

2 番目の例を次のように変更することで、接続拒否エラーを取り除くことができました。

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

これはusernameではなくuserです。

于 2012-12-11T20:30:09.360 に答える