Ruby / curl链接扩展器方法正在下载完整的目标URL

时间:2012-03-07 22:17:42

标签: ruby curl curb

我在我的红宝石(辛特拉)应用程序中使用curl制作了一个方便的小链接扩展器。

  def curbexpand(link) 
    result = Curl::Easy.new(link)
    begin 
      result.headers["User-Agent"] = "..."
      result.verbose = true
      result.follow_location = true
      result.max_redirects = 3
      result.connect_timeout = 5
      result.perform
      return result.last_effective_url # Returns the final destination URL after x redirects...
    rescue
      return link
      puts "XXXXXXXXXXXXXXXXXXX Error parsing link XXXXXXXXXXXXXXXXXXXXXXXXXXX"
    end
  end

我遇到的问题是有些天才使用URL缩短器链接到.exe和.dmg这样会很好但看起来上面我的curl脚本正在等待返回完整的响应(即它可能是一个1GB文件!)返回url之前。我不想使用第三方链接扩展器API,因为我有大量的链接要扩展。

任何人都知道我如何调整路边只是找到网址而不是等待完整的响应?

1 个答案:

答案 0 :(得分:0)

我已经使用Net::HTTP处理“HEAD”请求完成了您想要的操作,并以这种方式查找重定向。优点是HEAD不会返回内容,只返回标题。

来自the docs

head(path, initheader = nil) 

Gets only the header from path on the connected-to host. header is a Hash like { ‘Accept’ => ‘/’, … }.

This method returns a Net::HTTPResponse object.

This method never raises an exception.

response = nil
Net::HTTP.start('some.www.server', 80) {|http|
  response = http.head('/index.html')
}
p response['content-type']

将其与Net :: HTTP文档中的示例相结合,以便进行重定向,您应该能够找到登陆网址。

您可以使用Curl::http_head来完成同样的事情。