Ho avuto lo stesso problema in passato, per il mio caso ho risolto con questo metodo, che ti propongo ora come funzione.
Premetto che avendo a disposizione l'estensione curl l'ho preferito a file_get_contents.

Internamente effettua 5 tentativi su ogni url, puoi provarla così com'è ed eventualmente migliorarla a tuo piacimento ( ad esempio parametrizzare il numero di tentativi, effettuare un log per le url per le richieste che restituiscono errori ecc.. ).

Codice PHP:
      function curlRequest($url
      {
          
$error 0;
          
$tentativi 0;
          
$limit 5;
          
          do {
              
// Richiesta Curl
              
$ch curl_init();
              
curl_setopt($chCURLOPT_URL,$url);
              
curl_setopt($chCURLOPT_HEADERfalse);
              
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
              
$data curl_exec($ch);
              
$error curl_errno($ch);
              
curl_close($ch);
          
              
$tentativi++;
              
              if(
$tentativi == $limit) {
                  break;
              }
          
          } while(
$error != 0);
          
          
//echo "Tentativi: ".$tentativi;
          //var_dump($error);
          
return $data;
      } 
Ciao