49ers 32, Cardinals 20: Vernon Davis caught eight passes for a career-high 180 yards and two touchdowns and host San Francisco took advantage of four turnovers to win its third straight game.
Colin Kaepernick went 16-for-29 for 252 yards and hit Davis for touchdowns of 61 and 35 yards, and Frank Gore rushed for 101 yards for San Francisco (4-2). The 49ers surrendered 403 total yards but turned the four takeaways into 13 points.
Carson Palmer was 25-of-41 for 298 yards and two touchdowns for Arizona (3-3), but he also threw two interceptions and was sacked in the end zone for a safety. Larry Fitzgerald caught six passes for 117 and a touchdown and Andre Ellington added a rushing score.
The Cardinals pulled within 22-20 on Palmer's 10-yard touchdown pass to Michael Floyd with 8:12 left in the third quarter, but they failed on the two-point conversion and watched the game slip away with fumbles on their next two possessions.
Kendall Hunter's 6-yard touchdown run capped an 18-play, 89-yard drive to make it 29-20 and Phil Dawson's third field goal of the day pushed the lead to 12.
GAME NOTEBOOK: The 49ers have won eight of the last nine meetings. … Cardinals DE Calais Campbell was taken off on a stretcher in the fourth quarter but was able to give the crowd a thumbs-up sign while being wheeled away. Coach Bruce Arians said after the game that Campbell has movement in his extremities. … 49ers LB Patrick Willis recorded eight tackles and a forced fumble.