0

我在我的 Rails 应用程序中定义了一个 HTTP get 方法,类似这样。我想知道如何在每次重试时更新标头中的新 OAuth 令牌?

  def configure(service_base_uri, auth_header)
    Faraday.new(service_base_uri) do |faraday|
      faraday.headers['Authorization'] = auth_header
      faraday.request :retry, max: 5, interval: 0.05
      faraday.adapter Faraday.default_adapter
    end
  end

  def get(service_base_uri, path, error_message, params = {})
    auth_header = auth_token_generator(service_base_uri, path)

    connection = configure(service_base_uri, auth_header, headers)
    response = connection.get(parsed_uri.path, params)
    return JSON.parse(response.body)
  end

  def auth_token_generator(service_base_uri, path)
    # Some code
  end
4

1 回答 1

1

该类Faraday::Request::Retry允许一个名为 的参数retry_block

retry_block - 每次重试后执行的块。请求环境、中间件选项、当前重试次数和异常作为参数传递给块。

由于环境被传递到块中,您可以使用它来修改下一个请求的标头:

 Faraday.new(...) do |faraday|
   faraday.headers['Authorization'] = auth_header
   faraday.request :retry, ...,
     retry_block: proc { |env, opts, retries, exception|
       env.request_headers['Authorization'] = "Hello #{retries}"
     }
 end
于 2019-10-17T17:00:04.377 回答