Manchester City needed a late penalty from Erling Haaland to beat Fulham after Joao Cancelo’s first-half red card.