code: public <T> T makeRequest(String call, String method, boolean authenticate,
  							  ApiRequestWriter writer, ApiResponseReader<T> reader)
  	{
  		HttpURLConnection connection = null;
  		try
  		{
  			connection = sendRequest(call, method, authenticate, writer);
  			handleResponseCode(connection);
  
  			if(reader != null) return handleResponse(connection, reader);
  			else return null;
  		}
  		catch(IOException e)
  		{
  			throw new OsmConnectionException(e);
  		}
  		catch(OAuthException e)
  		{
  			// because it was the user's fault that he did not supply an oauth consumer and the
  			// error is kinda related with the call he made
  			throw new OsmAuthorizationException(e);
  		}
  		finally
  		{
  			if(connection != null) connection.disconnect();
  		}
  	}
docs: Make a request to the Http Osm Api
  
  @param call HTTP path and URL parameters (if any)
  @param method HTTP method. Defaults to "GET"
  @param authenticate whether to make this request as a logged in user
  @param writer the writer to send the request payload to the server. If null, no payload is
  sent
  @param reader the reader to parse the server's response and return an instance of T.
  If null, the server's response is ignored
  @return an instance of T