Techioz Blog

302 をレスキューするときにリストの反復処理が機能しない

概要

リストを反復処理し、すべての要素で get リクエストを送信すると、最初の反復でのみレスキューのブロックが実行されます。コードは次のとおりです。

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 にリダイレクトされ、許可される認証メカニズムは 1 つだけです。 X-Amz-Algorithm クエリ パラメーター、署名クエリ文字列パラメーター、または Authorization ヘッダーのみを指定する必要があります。エラーです。そこで、リダイレクトを停止し、最初の GET リクエストから場所を取得しようとしました。

レスキューブロックの調整など、複数の異なるアプローチを試しましたが、解決策はわかりませんでした。

できれば S3 エラーを回避したいと思います (リダイレクトされた RQ の認証トークンを何らかの方法で削除する必要があると思いますか?)

解決策

できれば S3 エラーを回避したいと思います (リダイレクトされた RQ の認証トークンを何らかの方法で削除する必要があると思いますか?)