Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

lire une page web sans redirection

2 réponses
Avatar
Alex
Bonjour,

j'essaye désespérement de lire une page web
(fopen("http://www.example.com", 'r') sans que php ne gère les
redirections.

Je m'explique, si le site web renvoie une page web avec un header
"HTTP/1.0 302", la page web est redirigée, le header contenant
la nouvelle adresse.

php étant extrémement bien codé (:)) il gère automatiquement
ce cas de figure, et renvoie la bonne page (après avoir lu le
nouveau fichier à la nouvelle adresse). Mais dans ce cas là,
impossible d'obtenir la nouvelle adresse.

Bref comment faire en sorte que php ne gère pas les redirection
et renvoie toute la page originale (avec le header "HTTP/1.0 302"),
ou récupèrer l'adresse réelle / la nouvelle adresse après qu'il
est effectué la redirection?


- J'arrive bien à le faire en passant par un proxy:
$proxy_fp = fsockopen($proxy_name, $proxy_port);
fputs($proxy_fp, "GET $url HTTP/1.0\r\nHost: $proxy_name\r\n\r\n");
while(!feof($proxy_fp)) {$proxy_cont .= fread($proxy_fp,4096);}
fclose($proxy_fp);
Dans ce cas là "$proxy_cont" contient la page originale avec le header
(de redirection si il y a lieu).

- mais pas sans passer par un proxy (avec une connection direct à
internet):
file($url)
fopen($url)
...

--
Alex

2 réponses

Avatar
Alex
Alex wrote:
Bonjour,

j'essaye désespérement de lire une page web
(fopen("http://www.example.com", 'r') sans que php ne gère les
redirections.


j'ai trouvé une réponse "partielle" qui fonctionne:

function get_url($url) {
$res = "";
$fp = fopen($url, 'r');

$meta_data = stream_get_meta_data($fp);
foreach($meta_data['wrapper_data'] as $response) {
$res .= $response . "rn";
}
$res .= "rn";
while(!feof($fp)) {$res .= fread($fp,4096);}
fclose($fp);
return $res;
}

php va toujours renvoyer la nouvelle page apres redirection,
sauf que le header de la page originale est ajoutée en haut du résultat,
donc pourra être traité plus tard.

--
Alex

Avatar
John GALLET
Bonjour,

j'essaye désespérement de lire une page web
(fopen("http://www.example.com", 'r') sans que php ne gère les
redirections.
Essaie avec la lib curl, en particulier le paramètre

CURLOPT_FOLLOWLOCATION

Cf. http://fr2.php.net/manual/en/function.curl-setopt.php

nouveau fichier à la nouvelle adresse). Mais dans ce cas là,
impossible d'obtenir la nouvelle adresse.
Pas sûr, vérifie aussi dans la lib curl.

Il y a CURLOPT_HEADER qui permet de récupérer ledit header dans l'output
disent-ils donc probablement de trouver la destination.

HTH

JG