在拯救 302 时,遍历列表不起作用

Iterating over a list doesn't work when rescuing 302

提问人:boberczus 提问时间:9/14/2023 更新时间:9/15/2023 访问量:29

问:

当我遍历一个列表,发送一个包含每个元素的 get 请求时,rescue 中的块仅在第一次迭代中执行。代码如下:

def download_doc(gem_id)
  url = @base_url + ATTACHMENT_ENDPOINT + gem_id + "/attachment"
  headers = {
    'Authorization' => @token
    }
  attempts = 0
  begin
response = RestClient::Request.execute(
      method: :get,
      url: url,
      headers: { Authorization: "Bearer #{@token}" },
      max_redirects: 0 
    )
  rescue RestClient::Found => found
    puts "FOUND #{gem_id}"
    exec "wget \"#{found.response.headers[:location]}\" -O \"#{gem_id}.pdf\" -q --show-progress"
  rescue => ex
    puts ex.response
  end
end

ids = File.read(@input_file).split(",")
arra.each do |id|
  download_doc(id)
end

上下文是我执行的 GET 请求重定向到 S3 并抛出错误。因此,我停止了重定向,并尝试从初始GET请求中获取位置。Only one auth mechanism allowed; only the X-Amz-Algorithm query parameter, Signature query string parameter or the Authorization header should be specified

我尝试了多个不同的应用程序,调整救援块等,但无法找出解决方案。

最好我会绕过 S3 错误(我想我应该以某种方式删除重定向 RQ 的授权令牌?

Ruby Amazon-S3 重定向 http-status-code-302

评论


答:

0赞 boberczus 9/15/2023 #1

问题是脚本停止了。请改用反引号 '''。 更多的信息: https://rubyquicktips.com/post/5862861056/execute-shell-commandsexec