我在我的红宝石(辛特拉)应用程序中使用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,因为我有大量的链接要扩展。
任何人都知道我如何调整路边只是找到网址而不是等待完整的响应?
答案 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
来完成同样的事情。