2012-03-11 78 views
1

我有一个URI是这样的:红宝石 - 无效的URI消息

https://chart.googleapis.com/chart?cht=lc&chd=s:cEAELFJHHHKUju9uuXUc&chco=76A4FB&chls=2.0&chs=220x125&chxt=x,y&chxr=1,0,4&chxl=3:|Jan|Feb|Mar&chxs=2,0000dd,13,-1,t,FF0000&chxp=2,10,35,95&chxtc=1,5,15

我试试这个:

require 'open-uri' 
open "https://chart.googleapis.com/chart?cht=lc&chd=s:cEAELFJHHHKUju9uuXUc&chco=76A4FB&chls=2.0&chs=220x125&chxt=x,y&chxr=1,0,4&chxl=3:|Jan|Feb|Mar&chxs=2,0000dd,13,-1,t,FF0000&chxp=2,10,35,95&chxtc=1,5,15" 

而且我得到以下信息:

URI::InvalidURIError: bad URI(is not URI?):

什么都要我做?

回答

3

管道导致您的问题。他们必须是percent encoded

您可以解决此通过

uri = "https://chart.googleapis.com/chart?cht=lc&chd=s:cEAELFJHHHKUju9uuXUc&chco=76A4FB&chls=2.0&chs=220x125&chxt=x,y&chxr=1,0,4&chxl=3:|Jan|Feb|Mar&chxs=2,0000dd,13,-1,t,FF0000&chxp=2,10,35,95&chxtc=1,5,15" 
uri.gsub!('|', '%7C') 
open uri 
1

您是否尝试过使用url编码字符串CGI::escape(str)

+0

是。如果我这样做,当我打开它认为是一个文件,而不是一个URL。 – 2012-03-11 22:59:08