Как изменить заголовок Auth при каждой попытке в клиенте Фарадея в ruby?

У меня есть метод HTTP get, определенный в моем приложении Rails примерно так. Мне интересно, как я могу обновлять новый токен 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

1 ответ

Решение

В Faraday::Request::Retry class позволяет параметр с именем 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
Другие вопросы по тегам