0

我在我的 ruby​​ (Sintra) 应用程序中使用 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,因为我有大量链接要扩展。

任何人都知道我可以如何调整遏制以找到网址而不是等待完整的回复?

4

1 回答 1

0

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

文档

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 文档中的示例进行以下重定向,您应该能够找到您的着陆 URL。

您可能可以Curl::http_head用来完成很多相同的事情。

于 2012-03-07T22:33:29.757 回答