URI::InvalidURIError when using curly brackets

I've been experimenting using open-uri to retrieve HTML from various
sites and have spent the past couple of days searching for an answer to
my problem. One page I've been trying to access contains a GUID in the
querystring and it has curly brackets around it. This is my code (I'm
just using Google for this example):

require 'open-uri'

uri =
URI.parse('http://www.google.co.uk/search?q={3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01}')
html = open(uri).read()

But I get the following error:

URI::InvalidURIError in DemoController#index

bad URI(is not URI?):
http://www.google.co.uk/search?q={3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01}

RAILS_ROOT: /code/public/../config/..

/usr/local/lib/ruby/1.8/uri/common.rb:432:in `split'
/usr/local/lib/ruby/1.8/uri/common.rb:481:in `parse'
#{RAILS_ROOT}/app/controllers/scrape_controller.rb:10:in `index'

From what I've found, curly brackets aren't allowed in a Ruby URI
(despite my browser being capable of handling them). I've tried encoding
them with %7B and %7D but then the page is called with the encoded
version, which in my case, the site isn't expecting and it doesn't work.

Is there a way to allow curly brackets in my URI? or another method to
download HTML which does?

Thanks.

···

--
Posted via http://www.ruby-forum.com/.

irb(main):001:0> URI.parse(URI.encode("{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01\} - Google Search))
=> #<URI::HTTP:0xfdba8216c URL:{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01} - Google Search;

-a

···

On Wed, 28 Jun 2006, Richard Leonard wrote:

I've been experimenting using open-uri to retrieve HTML from various
sites and have spent the past couple of days searching for an answer to
my problem. One page I've been trying to access contains a GUID in the
querystring and it has curly brackets around it. This is my code (I'm
just using Google for this example):

require 'open-uri'

uri =
URI.parse('{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01\} - Google Search)
html = open(uri).read()

But I get the following error:

URI::InvalidURIError in DemoController#index

bad URI(is not URI?):
{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01\} - Google Search

RAILS_ROOT: /code/public/../config/..

/usr/local/lib/ruby/1.8/uri/common.rb:432:in `split'
/usr/local/lib/ruby/1.8/uri/common.rb:481:in `parse'
#{RAILS_ROOT}/app/controllers/scrape_controller.rb:10:in `index'

From what I've found, curly brackets aren't allowed in a Ruby URI

(despite my browser being capable of handling them). I've tried encoding
them with %7B and %7D but then the page is called with the encoded
version, which in my case, the site isn't expecting and it doesn't work.

Is there a way to allow curly brackets in my URI? or another method to
download HTML which does?

Thanks.

--
suffering increases your inner strength. also, the wishing for suffering
makes the suffering disappear.
- h.h. the 14th dali lama

Richard Leonard wrote:

From what I've found, curly brackets aren't allowed in a Ruby URI

(despite my browser being capable of handling them).

Browsers lie.

require 'open-uri'
require 'cgi'
uri =
URI.parse('Google; + CGI.escape('{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01}'))
html = open(uri).read()

p html

···

--
James Britt

"Programs must be written for people to read, and only incidentally
  for machines to execute."
   - H. Abelson and G. Sussman
   (in "The Structure and Interpretation of Computer Programs)

sorry. hit send too soon - here's the rest:

   irb(main):002:0> f = open uri
   => #<File:/tmp/open-uri11746.1>

   irb(main):003:0> f.read.size
   => 17004

so encoding seems to work for me?

regards.

-a

···

On Wed, 28 Jun 2006 Ara.T.Howard@noaa.gov wrote:

irb(main):001:0> URI.parse(URI.encode("{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01\} - Google Search))
=> #<URI::HTTP:0xfdba8216c URL:{3F2504E0-4F89-11D3-9A-0C-03-05-E8-2C-33-01} - Google Search;

--
suffering increases your inner strength. also, the wishing for suffering
makes the suffering disappear.
- h.h. the 14th dali lama

The URL I'm actually trying to get is:
http://www.welshwalks.info/walksASP/routeSearchResult.asp?regionName=Isle+of+Anglesey&regionID={740C2C13-C8DB-49F7-81AE-3D23AC6ACCF2}

If you try that after passing it to URI.encode then the HTML I download
is their homepage - not the search results page you get if you paste
that into a browser.

Any ideas?

···

--
Posted via http://www.ruby-forum.com/.