Как "перезагрузить" запрос cloudflare 520 с помощью ruby?
Я написал скрипт ruby для загрузки URL изображения:
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 и не переключаясь на мой браузер? Повторный запуск сценария не делает работу.
1 ответ
Похоже, вы ищете команду задержки. В случае сбоя сценария (или при обнаружении "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