Si http://foo.com
redirige a 1.2.3.4
y luego lo redirecciona a http://finalurl.com
, ¿cómo puedo usar Ruby para averiguar la URL de destino "http://finalurl.com"?¿Cómo puedo obtener la URL final después de los redireccionamientos con Ruby?
Respuesta
Aquí hay dos maneras, utilizando tanto HTTPClient y Open-URI:
require 'httpclient'
require 'open-uri'
URL = 'http://www.example.org'
httpc = HTTPClient.new
resp = httpc.get(URL)
puts resp.header['Location']
>> http://www.iana.org/domains/example/
open(URL) do |resp|
puts resp.base_uri.to_s
end
>> http://www.iana.org/domains/example/
Es mejor usar httpc.head (URL) en lugar de httpc.get (URL). Esto evita que todo el sitio se cargue. – cavneb
De acuerdo, * SI * el host podría/podría hacer un redireccionamiento en una CABEZA. He visto respuestas HEAD que muestran un error sin redirección. Creo que es porque HEAD es más exploratorio. Y ese comportamiento podría haberse aislado a cierto HTTPd y los estándares, o versiones, cambiaron por lo que ya no es un problema. –
Comparé los métodos http, curl y open y los resultados son bastante inconsistentes. Algunos dan resultados para las URL que otros no. Estoy empezando a preguntar cuántos casos diferentes cubre un navegador web para que esto sea coherente. Ojalá tuviera lo mismo para Ruby. –
No soy muy usuario de Ruby, pero lo que básicamente necesitas es algo para interpretar los encabezados HTTP. La biblioteca siguiente aparece al hacer eso: "después de la redirección"
http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html
Salte a
Otra forma, utilizando Curb:
def get_redirected_url(your_url)
result = Curl::Easy.perform(your_url) do |curl|
curl.follow_location = true
end
result.last_effective_url
end
Esto no funciona de manera confiable. –
me han implementado un RequestResolver para mi necesidad:
https://gist.github.com/lulalala/6be104641bcb60f9d0e8
Utiliza Net :: HTTP y sigue múltiples redireccionamientos. También maneja redirecciones relativas. Fue por mi simple necesidad, entonces puedo tener errores. Si descubres uno, dímelo.
para JRuby
Esto funcionó
def get_final_url (url)
final_url = ""
until url.nil? do
final_url = url
url = Net::HTTP.get_response(URI.parse(url))['location']
end
final_url
end
- 1. ¿Cómo puedo obtener la URL de redireccionamiento final al usar urllib2.urlopen?
- 2. ¿Cómo puedo obtener la URL de redirección usando javascript?
- 3. ¿Cómo obtener la URL final después de seguir las redirecciones HTTP en PHP puro?
- 4. ¿Cómo puedo evitar que WWW :: Mechanize siga los redireccionamientos?
- 5. Obtener url después de curl se redirige
- 6. ¿Cómo puedo encontrar la URL final después de todas las redirecciones en Perl?
- 7. ruby httparty obtener URL de respuesta o ID después de la publicación
- 8. ¿Puede HtmlUnit manejar los redireccionamientos de JavaScript?
- 9. ¿Cómo rastrear los redireccionamientos en Firefox?
- 10. Magento: cómo eliminar todos los redireccionamientos permanentes
- 11. HTTP de Ruby obtener con los parámetros
- 12. cómo detectar redireccionamientos de url al cargar UIWebView en iphone?
- 13. Python HTTP HEAD: ¿trata adecuadamente los redireccionamientos?
- 14. Obtener caracteres después de la última/url en
- 15. Python sigue los redireccionamientos y luego descarga la página?
- 16. HttpWebRequest a URL con punto al final
- 17. Cómo obtener la URL anterior con PHP
- 18. Obtener la URL y los parámetros con SSI
- 19. StringBuilder: cómo obtener la cadena final?
- 20. ¿Cómo obtener los parámetros de URL con Javascript?
- 21. ¿Obtener los parámetros de cadena de URL?
- 22. ¿Cómo extraer los parámetros de URL de una URL con Ruby o Rails?
- 23. Cómo obtener la URL de una redirección con Python
- 24. ¿Cómo puedo obtener la URL de destino usando cURL?
- 25. Varios 301 redireccionamientos después de rediseñar un sitio web (SEO)
- 26. ¿Cómo puedo evitar que la seguridad de primavera se anexe; jsessionid = XXX a los redireccionamientos de inicio de sesión?
- 27. Cómo obtener la URL directa de los videos de youtube
- 28. Obtener ID de URL con jQuery
- 29. obtener la URL absoluta con EL
- 30. ¿Cómo puedo obtener la URL y Querystring? vb.net
favor mostrar algunos ejemplos de código para que podamos decir lo HTTP cliente que está utilizando. –
Utilicé [final_redirect_url] (https://rubygems.org/gems/final_redirect_url) gema para obtener la url redireccionada final. Simplemente devuelve la URL final como cadena. – Indyarocks