class HTTPClient::OAuth

def challenge(uri, param_str = nil)

you need to use this class directly.
Normally OAuthClient handles this correctly but see how it uses when
method just remember URL (nil means 'any') for the next connection.
retry which should not work in OAuth authentication context. This
challenge() in OAuth handler always returns false to avoid connection

Challenge handler: remember URL for response.
def challenge(uri, param_str = nil)
  synchronize {
    if uri.nil?
      @challenge[nil] = true
    else
      @challenge[urify(uri)] = true
    end
    false
  }
end