回答
您将不得不关注重定向。我认为,这将有助于:
http://shadow-file.blogspot.com/2009/03/handling-http-redirection-in-ruby.html
require 'net/http'
require 'uri'
Net::HTTP.get_response(URI.parse('http://t.co/yjgxz5Y'))['location']
# => "http://nickstraffictricks.com/4856_how-to-rank-1-in-google/"
根据文档,Net :: HTTP不会执行递归重定向,如果重定向被重定向,这是必需的。这看起来像只能处理第一个。 – 2011-04-03 23:17:02
是的。你需要一个循环。但无论如何,这是你如何遵循Ruby中的重定向,我相信这回答了这个问题。 – 2011-04-04 06:32:06
我用open-uri
对于这一点,因为它的简单好用。它将检索页面,也将遵循多重定向:
require 'open-uri'
final_uri = ''
open('http://t.co/yjgxz5Y') do |h|
final_uri = h.base_uri
end
final_uri # => #<URI::HTTP:0x00000100851050 URL:http://nickstraffictricks.com/4856_how-to-rank-1-in-google/>
该文档显示一个很好的例子使用较低级别的Net::HTTP处理重定向。
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end
puts fetch('http://www.ruby-lang.org')
当然,如果页面没有使用HTTP重定向,这一切都会崩溃。很多网站使用元重定向,您必须通过从元标记中检索URL来处理这些重定向,但这是一个不同的问题。
为了解决重定向问题,您应该使用HEAD
请求来避免下载整个响应主体(想象一下将一个URL解析为音频或视频文件)。使用法拉第宝石
工作实施例:
require 'faraday'
require 'faraday_middleware'
def resolve_redirects(url)
response = fetch_response(url, method: :head)
if response
return response.to_hash[:url].to_s
else
return nil
end
end
def fetch_response(url, method: :get)
conn = Faraday.new do |b|
b.use FaradayMiddleware::FollowRedirects;
b.adapter :net_http
end
return conn.send method, url
rescue Faraday::Error, Faraday::Error::ConnectionFailed => e
return nil
end
puts resolve_redirects("http://cre.fm/feed/m4a") # http://feeds.feedburner.com/cre-podcast
- 1. 如何获取缩短网址的目标网址?
- 2. 网址缩短
- 3. 缩短网址
- 4. 使用mod_rewrite缩短网址
- 5. 如何缩短网址?
- 6. 的网址缩短
- 7. 从长网址获取短网址
- 8. Codeigniter缩短网址
- 9. 网址缩短网站如何工作?
- 10. 如何使用谷歌缩短api创建缩短的网址
- 11. 用参数缩短网址
- 12. 用.htaccess缩短网址
- 13. 用mediawiki缩短网址
- 14. 用htacess缩短网址
- 15. 从C#中缩短网址获得完整的网址.net
- 16. htaccess的缩短网址
- 17. 如何缩短网址的开头?
- 18. 获取网页上所有缩短的网址
- 19. @anywhere tweetbox与缩短网址
- 20. 将网址缩短为cms
- 21. ASP.NET MVC - 缩短网址
- 22. .htaccess帮助缩短网址
- 23. c#4.0 - 使用bit.ly缩短网址
- 24. 使用.htaccess/mod_rewrite缩短网址?
- 25. 使用谷歌api缩短网址
- 26. 使用Bitly API缩短网址
- 27. 在地址栏中缩短网址
- 28. 如何使用python取消缩短网址?
- 29. PHP:如何缩短网址+从数据库获取数据
- 30. 我想从Android上的短网址获取长网址
尝试这种宝石[final_redirect_url](https://github.com/indyarocks/final_redirect_url)。 – Indyarocks 2017-05-04 20:23:10
gem final_redirect_url正是你想要的 - >真正的URL,没有大惊小怪,没有麻烦。 +1 – 2017-05-19 16:06:48