如何用ruby“重新加载”cloudflare 520请求?

时间:2017-04-16 08:09:22

标签: ruby-on-rails ruby cloudflare imagedownload

我写了一个ruby脚本来下载图片网址:

require 'open-uri'

imageAddress = ARGV[0]
targetPath = ARGV[1]

fullFileNamePath = "#{targetPath}test.jpg"

  begin
    File.open(fullFileNamePath, 'wb') do |fo|
        fo.write open(imageAddress).read
      end
  rescue OpenURI::HTTPError => ex
    puts ex
    File.delete(fullFileNamePath)
  end

示例用法:

ruby download_image.rb "https://images.genius.com/b015b15e476c92d10a834d523575d3c9.1000x1000x1.jpg" "/Users/Me/Downloads/"

问题是,有时我遇到这个输出错误:

520 Origin Error

然后,当我在浏览器中尝试相同的URL时,我会得到类似的结果:

enter image description here

如果我重新加载页面或点击上图中的“重试实时版本”按钮,则会加载页面。

然后,如果我再次运行该脚本,则可以正常下载图像。

那么如何使用ruby复制此页面重新加载/“重试实时版本”行为并且无需切换到我的浏览器?再次运行脚本不起作用。

1 个答案:

答案 0 :(得分:0)

听起来你正在寻找延迟命令。如果脚本失败(或遇到'520 Origin Error'),请等待并重试。

这是一个快速构建的递归函数,您可能希望添加其他检查以确定循环次数,在这么多次之后中断。 (也未经过测试,可能包含错误,仅作为示例)

def getFile(params_you_need)
   begin
      File.open(fullFileNamePath, 'wb') do |fo|
      fo.write open(imageAddress).read
   end
   rescue OpenURI::HTTPError => ex
     puts ex
     File.delete(fullFileNamePath)
      if ex == '520 Origin Error'
        sleep(30) #generally a good time to pause
        getFile(params_you_need)
      end
   end
end