Как изменить заголовок 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