2013-03-22 20 views
1

我有訪問REST API的守護進程的問題。RestClient基本身份驗證與#在用戶名

訪問需要基本認證。用戶名和密碼是固定的,不能更改。

這個問題似乎是,該用戶名看起來像這樣:#ws+R4nd0mS7r1n

我訪問這樣的API:

resource = RestClient::Resource.new("#{base_url}/failover/#{failover_ip}", { :user => user_name, :password => user_password}) 
response = resource.get 

這讓我一個壞的URI錯誤:

bad URI(absolute but no path): https://#ws+R4nd0mS7r1n:[email protected]/failover/11.11.11.11 

當我從它的工作用戶名中刪除#時,我得到一個NOT Authenticated錯誤。

有沒有辦法將包含#的用戶名或密碼傳遞給restclient? 將完整的URI手動傳遞給.get也不起作用。

+1

你有沒有嘗試過其他客戶?像[法拉第](https://github.com/lostisland/faraday)或[HTTParty](https://github.com/jnunemaker/httparty/blob/master/examples/delicious.rb)? – 2013-03-22 10:22:30

+0

您是否嘗試用'%23'替換'#'? – 2013-03-22 11:18:55

+0

用戶名/密碼組合最終會進入http請求的Authorization頭部,因此Oto建議嘗試替代客戶端是合理的。此外,你可以嘗試直接設置標頭 – 2013-03-22 12:13:09

回答

3

我沒有得到相同的錯誤。你安裝了什麼版本的rest-client

你可能只是能夠更新版本,以解決您的問題

另外,這部作品圍繞URI未能通過直接寫入授權頭((我與寶石的1.6.7版本測試),這無論如何,這個數據都是在這裏結束的):

require 'base64' 
auth = 'Basic ' + Base64.encode64("#{user_name}:#{user_password}").chomp 
resource = RestClient::Resource.new("#{base_url}/failover/#{failover_ip}", { :headers => { 'Authorization' => auth } }) 
resource.get 
+0

我也使用1.6.7,使用紅寶石1.8。 – Bannane 2013-03-22 13:04:09

+0

我試過1.6.7和ruby 1.8.7-p352,並且連接到了一個echo服務,它顯示auth頭部被設置如下:'Authorization:Basic I3dzK1I0bmQwbVM3cjFuOmZvbw =='。 。 。所以我懷疑你的調用堆棧失敗了。我會盡力爲你找出解決方法 – 2013-03-22 13:22:32

+0

把解決方法放到我的答案中。您可能仍希望檢查您的網絡堆棧是否存在引發錯誤的地方 - 它可能只是某處過時的gem。 – 2013-03-22 13:37:22