【问题标题】:Bad URI Ruby on Rails: is it because long?坏 URI Ruby on Rails:是因为长吗?
【发布时间】:2016-07-05 01:20:29
【问题描述】:

所以我有一个可以正常工作的网站,在 URL 中编码了一些 URI。

但是,当我尝试将 URL 传递给我的 chrome 浏览器时:

http://somewhere:3000/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}

-- 它在浏览器中引发错误:

Bad Request

bad URI `/find/someOne?utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A%22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22%22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22%22%2C%22taxRate%22%3A%22%22}'.

WEBrick/1.3.1 (Ruby/1.9.3/2014-11-13) at somewhere.com:3000

还在 Rails 控制台中显示 [2016-07-04 18:11:31] ERROR bad URI

版本:

  • rails3
  • Ruby 1.9.3

知道如何让它工作吗?是因为URI中的{}还是太长了?

【问题讨论】:

  • 我会先尝试对{/} 进行uuencoding,看看是否能解决问题。
  • 请编辑您的问题以包含您的代码。另外,请澄清您的问题。 “当我尝试粘贴 URL 时”是什么意思?粘贴到哪里?

标签: html ruby-on-rails ruby http uri


【解决方案1】:

根据传入请求解析控制器中的路径,使用Rack::Utils#parse_nested_query,参见:http://www.rubydoc.info/github/rack/rack/master/Rack/Utils.parse_nested_query

# config/routes.rb

get '/find/someOne/*str' => 'find#someOne'


# app/controllers/find_controller.rb

class FindController < ApplicationController
  def someOne
    custom_params = Rack::Utils.parse_nested_query(request.env['ORIGINAL_FULLPATH'])
    querys_hash = JSON.parse(custom_params["querys"])
  end
end

控制台示例:

$ bundle exec rails c 在进程 31944 中通过 Spring 预加载器运行 加载开发环境(Rails 5.0.0) irb(main):001:0> custom_params = Rack::Utils.parse_nested_query "utf8=%E2%9C%93&search=someThing&choicen=no&querys={%22peopleName%22%3A%22%22%2C%22peopleGroup%22%3A %22%22%2C%22place%22%3A%22%22%2C%22pip%22%3A%22%22%2C%22hw%22%3A%22%22%2C%22somerock%22%3A%22 %22%2C%22rocksomerock%22%3A%22%22%2C%22diedAt%22%3A%222016-01-01%20-%202016-12-31%22%2C%22borndAt%22%3A%22% 22%2C%22taxRate%22%3A%22%22}" => {"utf8"=>"✓", "search"=>"someThing", "choicen"=>"no", "querys"=>"{\"peopleName\":\"\",\" peopleGroup\":\"\",\"place\":\"\",\"pip\":\"\",\"hw\":\"\",\"somerock\":\" \",\"rocksomerock\":\"\",\"diedAt\":\"2016-01-01 - 2016-12-31\",\"borndAt\":\"\",\"taxRate \":\"\"}"} irb(main):002:0> querys_hash = JSON.parse custom_params["querys"] => {"peopleName"=>"", "peopleGroup"=>"", "place"=>"", "pip"=>"", "hw"=>"", "somerock"=>"" , "rocksomerock"=>"", "diedAt"=>"2016-01-01 - 2016-12-31", "borndAt"=>"", "taxRate"=>""}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    • 2015-12-22
    • 2013-05-04
    • 1970-01-01
    • 2011-07-01
    相关资源
    最近更新 更多