Forum: Ruby on Rails test if an external url is valid before redirecting to it?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Max W. (Guest)
on 2009-02-10 18:56
In our site, users can have a url associated with their account to which
they are redirected when their login expires.  This can differ from user
to user, and is prone to being mis-copied, or the sites in question not
being there any more etc.  I'd like to test if the url is valid before
sending the user on to it.

So, i want, in the controller, to do something like this -

if external_url_is_valid?(user.expiry_url)
  redirect_to user.expiry_url
else
  redirect_to "our_default_expiry_page"
end

Can anyone tell me a nice, simple and efficient way of doing the
"external_url_is_valid?" bit?
Andrew T. (Guest)
on 2009-02-10 19:40
(Received via mailing list)
On Tue, Feb 10, 2009 at 6:56 PM, Max W. <
removed_email_address@domain.invalid> wrote:

>  redirect_to user.expiry_url
>
require 'net/http'
require 'uri'

def external_url_is_valid?(url)
  uri = URI.parse(url)
  response = Net::HTTP.start(uri.host, uri.port) {|http|
http.head(uri.path)}
  response.is_a?(Net::HTTPSuccess) ||
response.is_a?(Net::HTTPRedirection)
end

Watch the validity of the url - www.google.com is not valid
http://www.google.com also won't work, http://www.google.com/ will

I wouldn't do this at the point of redirection, I would do it at the
point
of saving the redirection url

Andrew T.
http://ramblingsonrails.com
http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain
Max W. (Guest)
on 2009-02-10 19:52
That's perfect, thanks Andrew.

You're probably right about testing the validity at the point of adding
it rather than (or as well as) the redirect.  I think i'll put a remote
test button next to the input field, and maybe call it automatically on
change of the field.

Anyway, thanks again.
max
This topic is locked and can not be replied to.