Ruby 用户名为#的RestClient基本身份验证

Ruby 用户名为#的RestClient基本身份验证,ruby,basic-authentication,rest-client,Ruby,Basic Authentication,Rest Client,我遇到了一个守护进程访问RESTAPI的问题 访问需要基本身份验证。用户名和密码是固定的,不能更改 问题似乎是,用户名如下所示:#ws+R4nd0mS7r1n 我访问API的方式如下: resource = RestClient::Resource.new( "#{base_url}/failover/#{failover_ip}", { :user => user_name, :password => user_password}) response = resource.get

我遇到了一个守护进程访问RESTAPI的问题

访问需要基本身份验证。用户名和密码是固定的,不能更改

问题似乎是,用户名如下所示:
#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:RaNdOmPaSsWoRd@robot-ws.your-server.de/failover/11.11.11.11
当我最终从用户名中删除#时,它可以工作,但我得到一个未经验证的错误

有没有办法将包含#的用户名或密码传递给restclient?
手动将完整的URI传递给.get也不起作用。

我没有收到相同的错误。您安装了什么版本的rest客户端

您可以简单地更新版本以解决您的问题(我使用gem的1.6.7版进行了测试)

或者,这可以通过直接写入授权头来解决URI失败的问题(无论如何,这也是数据结束的地方):


你试过其他客户吗?喜欢还是?您是否尝试过将
#
替换为
%23
?用户名/密码组合最终会进入http请求的授权头部分,因此Oto建议尝试另一个客户端是合理的。另外,您可以尝试直接设置标题。我尝试了HttpParty,但现在出现了类似“无法将HttpParty.Response转换为字符串”的错误。有没有一种方法可以很容易地做到这一点,这样我就不必调整整个应用程序?请参阅下面的答案-您使用的是什么版本的Ruby和rest客户端?rest客户机也可能正在使用更深层次的http传输库,而正是这个库拒绝了URI。您可能不需要重新使用工具,只需找到过时或与所需服务不兼容的组件我也在使用1.6.7,ruby 1.8。我尝试了1.6.7和ruby 1.8.7-p352,并连接到了echo服务,它显示了如下设置的auth头:
授权:Basic I3dzK1I0bmQwbVM3cjFuOmZvbw==
。所以我怀疑调用堆栈中还有其他东西失败了。我会试着为你想出一个变通办法在我的答案中加入变通办法。你可能仍然希望检查你的网络堆栈,看看是什么导致了这个错误——它可能只是某个地方的一个过时的gem。我试过了,它似乎起了作用。最后切换到另一个API。
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