diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index da7b2b2465c11505ae69efdb896c4778a024992a..95796b66db6922c50110555f892ddc44f29960cc 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -1070,9 +1070,10 @@ function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image =
 	// On va directement charger le debut des images et des fichiers html,
 	// de maniere a attrapper le maximum d'infos (titre, taille, etc). Si
 	// ca echoue l'utilisateur devra les entrer...
-	if ($headers = recuperer_page($source, false, true, $max, '', '', true)) {
-		list($headers, $a['body']) = preg_split(',\n\n,', $headers, 2);
-
+	$reponse = recuperer_url($source, ['taille_max' => $max, 'refuser_gz' => true]);
+	$headers = $reponse['headers'] ?? '';
+	$a['body'] = $reponse['page'] ?? '';
+	if ($headers) {
 		if (preg_match(",\nContent-Type: *([^[:space:];]*),i", "\n$headers", $regs)) {
 			$mime_type = (trim($regs[1]));
 		} else {
@@ -1184,7 +1185,8 @@ function recuperer_infos_distantes($source, $max = 0, $charger_si_petite_image =
 
 	if ($mime_type == 'text/html') {
 		include_spip('inc/filtres');
-		$page = recuperer_page($source, true, false, _INC_DISTANT_MAX_SIZE);
+		$page = recuperer_url($source, ['transcoder' => true, 'taille_max' => _INC_DISTANT_MAX_SIZE]);
+		$page = $page['page'] ?? '';
 		if (preg_match(',<title>(.*?)</title>,ims', $page, $regs)) {
 			$a['titre'] = corriger_caracteres(trim($regs[1]));
 		}
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 578cc8c5708483a030a9f18eb79fbe8bd0183799..dc59de1f3f16eacb55768200d8ad9f069d7f7413 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -2986,7 +2986,7 @@ function direction_css($css, $voulue = '') {
  * Le calcul n'est pas refait si le fichier cache existe déjà et que
  * la source n'a pas été modifiée depuis.
  *
- * @uses recuperer_page() si l'URL source n'est pas sur le même site
+ * @uses recuperer_url() si l'URL source n'est pas sur le même site
  * @uses urls_absolues_css()
  *
  * @param string $css
@@ -3016,7 +3016,9 @@ function url_absolue_css($css) {
 			or !lire_fichier(_DIR_RACINE . substr($css, $l), $contenu)
 		) {
 			include_spip('inc/distant');
-			if (!$contenu = recuperer_page($css)) {
+			$contenu = recuperer_url($css);
+			$contenu = $contenu['page'] ?? '';
+			if (!$contenu) {
 				return $css;
 			}
 		}
diff --git a/ecrire/inc/filtres_mime.php b/ecrire/inc/filtres_mime.php
index 6c07c9c1d9e2df32fbacb4345a5074e19974ff77..75b417bca80e4678c19d221ef352bc99ada0af67 100644
--- a/ecrire/inc/filtres_mime.php
+++ b/ecrire/inc/filtres_mime.php
@@ -180,8 +180,10 @@ function filtre_text_html_dist($t) {
 	if (preg_match_all(',<link[^>]+type=.text/css[^>]*>,is', $h, $r, PREG_PATTERN_ORDER)) {
 		foreach ($r[0] as $l) {
 			preg_match("/href='([^']*)'/", str_replace('"', "'", $l), $m);
+			$page = recuperer_url($m[1]);
+			$page = $page['page'] ?? '';
 			$style .= "\n/* $l */\n"
-				. str_replace('<', '', recuperer_page($m[1]));
+				. str_replace('<', '', $page);
 		}
 	}
 	// Pourquoi SafeHtml transforme-t-il en texte les scripts dans Body ?
diff --git a/ecrire/inc/math.php b/ecrire/inc/math.php
index b3e8059ba17800d221f3626eb42291d4f133d31f..67c11b0e1d31c725d5ffcfb679632a4e4afb2aa4 100644
--- a/ecrire/inc/math.php
+++ b/ecrire/inc/math.php
@@ -49,7 +49,7 @@ function produire_image_math($tex) {
 		if ($server) {
 			spip_log($url = $server . '?' . rawurlencode($tex));
 			include_spip('inc/distant');
-			recuperer_page($url, $fichier);
+			recuperer_url($url, ['file' => $fichier]);
 		}
 	}
 
diff --git a/ecrire/inc/xml.php b/ecrire/inc/xml.php
index 6421c86bce06cbad03e6188fe2754a2cd0679ba1..076aa5bb6909090e90d7c0c13740f55d73d33d12 100644
--- a/ecrire/inc/xml.php
+++ b/ecrire/inc/xml.php
@@ -50,7 +50,8 @@ function spip_xml_load($fichier, $strict = true, $clean = true, $taille_max = 10
 	$contenu = "";
 	if (tester_url_absolue($fichier)) {
 		include_spip('inc/distant');
-		$contenu = recuperer_page($fichier, false, false, $taille_max, $datas);
+		$contenu = recuperer_url($fichier, ['taille_max' => $taille_max, 'datas' => $datas]);
+		$contenu = $contenu['page'] ?? '';
 	} else {
 		lire_fichier($fichier, $contenu);
 	}
diff --git a/ecrire/iterateur/data.php b/ecrire/iterateur/data.php
index da8c7231d4c069aaac1ce853caaa60dbcc42ac33..5a6dd54b1c223978b16a987708cfd64fd525f665 100644
--- a/ecrire/iterateur/data.php
+++ b/ecrire/iterateur/data.php
@@ -314,7 +314,8 @@ class IterateurDATA implements Iterator {
 					if (is_string($src)) { 
 						if (tester_url_absolue($src)) {
 							include_spip('inc/distant');
-							$data = recuperer_page($src, false, false, _DATA_SOURCE_MAX_SIZE);
+							$data = recuperer_url($src, ['taille_max' => _DATA_SOURCE_MAX_SIZE]);
+							$data = $data['page'] ?? '';
 							if (!$data) {
 								throw new Exception("404");
 							}
diff --git a/ecrire/xml/analyser_dtd.php b/ecrire/xml/analyser_dtd.php
index 057a6d6542dff39511e225939891860cb1eec153..6fd9996c6f9c93c1962f6c212dcd3a3a9cf10ecc 100644
--- a/ecrire/xml/analyser_dtd.php
+++ b/ecrire/xml/analyser_dtd.php
@@ -109,7 +109,9 @@ function analyser_dtd($loc, $avail, &$dtc) {
 	} else {
 		if ($avail == 'PUBLIC') {
 			include_spip('inc/distant');
-			if ($dtd = trim(recuperer_page($loc))) {
+			$dtd = recuperer_url($loc);
+			$dtd = trim($dtd['page'] ?? '');
+			if ($dtd) {
 				ecrire_fichier($file, $dtd, true);
 			}
 		}
diff --git a/prive/formulaires/configurer_relayeur.php b/prive/formulaires/configurer_relayeur.php
index df2c43f2667bb7a184dd1286a712d6e17f1c9eac..714720f9ee363af97b57f426c023ac34bd174437 100644
--- a/prive/formulaires/configurer_relayeur.php
+++ b/prive/formulaires/configurer_relayeur.php
@@ -56,7 +56,8 @@ function formulaires_configurer_relayeur_verifier_dist() {
 				$cur_http_noproxy = $GLOBALS['meta']['http_noproxy'];
 				$GLOBALS['meta']['http_proxy'] = $http_proxy;
 				$GLOBALS['meta']['http_noproxy'] = $http_noproxy;
-				$page = recuperer_page($test_proxy, true);
+				$page = recuperer_url($test_proxy, ['transcoder' => true]);
+				$page = $page['page'] ?? '';
 				$GLOBALS['meta']['http_proxy'] = $cur_http_proxy;
 				$GLOBALS['meta']['http_noproxy'] = $cur_http_noproxy;
 				if ($page) {