【问题标题】:URI::InvalidURIError (bad URI(is not URI?): ):URI::InvalidURIError(错误的 URI(不是 URI?):):
【发布时间】:2011-07-19 11:16:45
【问题描述】:

我正在尝试在 Rails 3 中实现 OAuth 提供程序。当我尝试授权客户端应用程序时,我收到此错误。我正在使用 RESTful auth 插件和 pelles OAuth-plugin。当我通过 Rails 控制台进行测试并收到此错误时,我认为我只需要对 URL 进行编码,但在浏览器中进行测试时遇到了同样的错误,所以我不确定出了什么问题。

【问题讨论】:

    标签: ruby-on-rails-3 oauth


    【解决方案1】:

    我遇到了URI.split 的麻烦(返回此错误),我不知道这是否对您有帮助,但我会在此处发布一些警告,以提醒其他遇到此错误的人:

    1. 检查您的 url 不是 nil,它是一个有效的。
    2. URI.encode(url)URI.parse 之前(以避免特殊字符)
    3. 对传递给URI.parse 的字符串执行strip(以避免前导和尾随空格)。

    一体化:

    uri = URI.parse(URI.encode(url.strip))
    

    相关资源:http://www.practicalguile.com/2007/09/15/raising-uriinvalidurierror-from-a-perfectly-valid-uri/

    【讨论】:

    • 这样做仍然没有帮助我拆分网址。对此有何建议?我可以在这里找到关于使用自定义 uri 部分匹配器的提示:ruby-doc.org/stdlib-1.9.3/libdoc/uri/rdoc/…,但我不确定要为我的问题覆盖什么(查询参数的字符不被URI.split 接受)。
    • 我实际上认为我将使用纯正则表达式来完成我需要做的事情。 URI.split 似乎是一个不完整的 rfc3986 解析器,所以最好绕过它并省去一些麻烦。
    • 你会把这个放在哪里?例如在搜索控制器或​​配置文件中?谢谢!
    • 'https://example.com/[%23R]%20' 即使在URI.encode 之后也会导致异常
    【解决方案2】:

    您也可以使用此替代 URI gem:https://github.com/sporkmonger/addressable

    没有这样的问题。

    非常原生,只需在安装 gem 后在代码中添加命名空间

    Addressable::URI
    

    【讨论】:

    • 不应将此 gem 视为替代品。他们正在关闭需要一分钟以上思考的错误,原因是:“我不认为 Addressable::URI 和 URI 之间的兼容性是 Addressable 项目的目标”(c)github.com/sporkmonger/addressable/issues/…
    【解决方案3】:

    试试这个:

    safeurl = URI.encode(url.strip)
    response = RestClient.get(safeurl)
    

    【讨论】:

    • 您能否在答案中添加详细信息?
    • 'https://example.com/[%23R]%20' 即使在URI.encode 之后也会导致异常
    【解决方案4】:

    我来这里是因为我遇到了快车道问题。它是用 Ruby 编写的,因此我的回答可能会有所帮助。

    就我而言,我有环境变量http_proxy = XX.XX.XX.XX:XXXXhttps_proxy = ... 当我将它们分别更改为 http_proxy = http://XX.XX.XX.XX:XXXXhttps_proxy = https://... 时,问题就消失了。

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2020-02-03
      • 2017-12-18
      • 2020-06-11
      • 1970-01-01
      相关资源
      最近更新 更多