Hi!
I need to redirect to some 3rd party websites. The issue is that some of the urls works to redirect and some doesn’t work, using redirect_to url
Example 1:
http://example.com/click?a(9999999)p(9999999)prod(999999)ttid(999)url(http%3A%2F%2Fwww.someothersite.se%2Fd%2FBLah-Fooo%2FBar%2F_%2FA-3z324qaF1z140nu%3FNr%3D234234234)
With this URL I just do: redirect_to url
Example 2:
http://click.example.com/c/9999/m/9999/t/a/9999/?url=http://www.someothersite.se/sv/foo/bar/baz-99/foo-bar-baz-9999?tm=999999
When using: redirect_to url
I get “ERROR URI::InvalidURIError: bad URI(is not URI?)”
So, I tried to just do:
redirect_to URI.encode(url)
… and it works! But then the URL in example 1 is not working anymore. Says the site is not found. No error in Rails though.
So, I need an approach that works with both (all?) URIs. Any ideas?
hassan
(Hassan Schroeder)
July 29, 2012, 5:30pm
2
Write a utility method, e.g. redirect_to sanity_checked(url) that either
returns the original URL if it's good or an encoded version if not.
Which is not to say that simply encoding it will fix every error, so it's
probably worth checking that result too
HTH,
Thank you for your time.
How can I check if the URL is “good” or needs to be encoded?
Best Regards
Linus
I mean, URI.parse(uri) doesn’t return any error on either of the URIs it seems.
Actually, I think I found a solution now.
I first parse it, like:
uri = URI.parse(the_url)
and then:
redirect_to uri.to_s
Works
My bad, it does NOT work!
hassan
(Hassan Schroeder)
July 29, 2012, 9:58pm
7
Without looking at the code, it's hard to imagine you're getting the
"ERROR URI::InvalidURIError: bad URI(is not URI?)" exception you
originally reported from other than URI.parse, but -- can you get a
stack trace to show exactly what's raising that?