关于ruby:用户名中带有#的RestClient基本身份验证

RestClient basic auth with # in username

守护程序访问REST api时出现问题。

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

问题似乎是用户名看起来像这样:#ws+R4nd0mS7r1n

我这样访问API:

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

这使我收到一个错误的URI错误:

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

当我有意从用户名中删除#时,它可以工作,但出现未验证的错误。

是否可以将包含#的用户名或密码传递给restclient?
手动将完整的URI传递给.get也不起作用。


我没有得到同样的错误。您已安装什么版本的rest-client

您可能只需更新版本即可解决您的问题(我已使用gem 1.6.7版进行了测试)

或者,这可以通过直接写入Authorization标头(无论如何该数据最终到达该地址)来解决URI故障:

1
2
3
4
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