Redirect to a 3rd party website

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?

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 :slight_smile:

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 :slight_smile:

My bad, it does NOT work!

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?