【发布时间】:2013-03-22 10:14:10
【问题描述】:
我在访问 REST api 的守护程序时遇到问题。
访问需要基本身份验证。用户名和密码是固定的,不能更改。
问题似乎是,用户名看起来像这样:#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
当我故意从用户名中删除 # 时,它可以工作,但我得到一个 NOT Authenticated 错误。
有没有办法将包含# 的用户名或密码传递给restclient? 手动将完整的 URI 传递给 .get 也不起作用。
【问题讨论】:
-
你试过用
%23替换#吗? -
用户名/密码组合最终会进入 http 请求的授权标头部分,因此 Oto 尝试替代客户端的建议是合理的。另外,您可以尝试直接设置标题
-
我尝试了 HTTParty,但现在出现“无法将 HTTParty.Response 转换为字符串”之类的错误。有没有办法轻松做到这一点,这样我就不必调整整个应用程序?
-
在下面查看我的答案 - 您使用的是什么版本的 Ruby 和 rest-client? rest-client 也很可能正在使用更深层次的 http 传输库,而正是它拒绝了 URI。您可能不需要重新工具,只需找到已过期或与您所需服务不兼容的组件
标签: ruby basic-authentication rest-client