我写了一个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时,我会得到类似的结果:
如果我重新加载页面或点击上图中的“重试实时版本”按钮,则会加载页面。
然后,如果我再次运行该脚本,则可以正常下载图像。
那么如何使用ruby复制此页面重新加载/“重试实时版本”行为并且无需切换到我的浏览器?再次运行脚本不起作用。
答案 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