【问题标题】:RestClient bug on response redirect encoding响应重定向编码的 RestClient 错误
【发布时间】:2015-04-24 00:08:20
【问题描述】:

尝试获取此页面时:

resp = RestClient.get("http://www.radios.com.br/aovivo/XXXX/24924")

我收到此错误:

URI::InvalidURIError: bad URI(is not URI?): http://www.radios.com.br/aovivo/Radio-Gospel-Ajduk?s/24924
    from /Users/danicuki/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/uri/common.rb:176:in `split'
    from /Users/danicuki/.rvm/rubies/ruby-2.0.0-p353/lib/ruby/2.0.0/uri/common.rb:211:in `parse'

我认为这是因为响应重定向 url 存在编码问题。如何解决?

【问题讨论】:

    标签: ruby encoding uri rest-client


    【解决方案1】:

    RestClient需要打补丁:(2.1.0版本还没有修复)

    RestClient::AbstractResponse.module_eval do
    
      alias _origin_follow_redirection _follow_redirection
      def _follow_redirection(new_args, &block)
        # cannot follow redirection if there is no location header
        raise exception_with_response unless headers[:location]
    
        # Fix URI::InvalidURIError: URI must be ascii only
        headers[:location] = URI::encode headers[:location]
    
        _origin_follow_redirection new_args, &block
      end
    
    end
    

    【讨论】:

      【解决方案2】:

      URI 中的非 ASCII 字符必须是 urlencoded:

      url = "http://www.radios.com.br/aovivo/XXXX/24924"
      resp = RestClient.get(URI::encode(str))
      

      【讨论】:

        猜你喜欢
        • 2018-04-02
        • 2011-08-08
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 2016-06-20
        相关资源
        最近更新 更多