Curl et domaines [Résolu]

Messages postés
147
Date d'inscription
mercredi 3 décembre 2003
Dernière intervention
12 juin 2008
- - Dernière réponse : M000004965
Messages postés
147
Date d'inscription
mercredi 3 décembre 2003
Dernière intervention
12 juin 2008
- 26 mars 2008 à 18:03
Bonjour à toutes et tous,

J’utilise un script fondé sur CURL pour analyser des sites web mobil.
Je dispose donc d’une liste d’url désignant la home de chaque site à tester.
Je définis le domaine en fonction de l’url de base hors, lorsqu’un site procède à une redirection, le domaine n’est plus bon.
Je cherche donc le moyen d’identifier le domaine après la réponse http que me retourne CURL.

Pour ce faire j’utilise la RegExp suivante :

     preg_match('@^(?:http://)?([^/]+)@i',$UrlHome, $matches);
     $Domaine = $matches[1];

J’ai besoin de cette étape pour reconstituer l’adresse complète des liens relatifs contenus dans les pages analysées.

Peut-être existe-t-il une autre méthode, si c’est le cas, je suis preneur de toute info et piste de recherche.

D’avance, merci

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
147
Date d'inscription
mercredi 3 décembre 2003
Dernière intervention
12 juin 2008
3
Merci
Pour info, la solution est donc:

modifier le script et insérer un test sur $info['redirect_count']  car si c'est égale à 1 allors il y a redirection.
Il n'y a plus qu'à récupérer le contenu de $info['url']  et d'en extraire le domaine.

Kipp Cool

Autodidact, je ne demande qu'à apprendre... Merci de votre aide

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 105 internautes ce mois-ci

Commenter la réponse de M000004965
Messages postés
2492
Date d'inscription
jeudi 30 novembre 2006
Dernière intervention
14 janvier 2011
0
Merci
Salut,

Tu peux récupérer les entêtes HTTP avec la fonction apache_request_headers() : http://fr.php.net/manual/fr/function.apache-request-headers.php
Dans ces entêtes doit figurer l'url de redirection.
Peut-être consulter les spécifications HTTP1.1 pour savoir quelle valeur chercher...

<hr size="2" width="100%" />Neige
Commenter la réponse de neigedhiver
Messages postés
147
Date d'inscription
mercredi 3 décembre 2003
Dernière intervention
12 juin 2008
0
Merci
bonjour,

dsl je n'ai pas répondu + tot, mon easyphp c'était envoyé en l'air. (merci pour ton aide )

Bon, c'est pas gagné, j'ai lu tout ce que j'ai pu trouver sur apache-request-headers mais tout est lié avec du local.

je ne vois comment je passe une url au code suivant par exemple: (c'est juste le code exemple sur php.net)

$headers =  apache_request_headers();

foreach ($headers as $header => $value) {
    echo "$header: $value 
\n";
}
================
Ci dessous mon code pour que vous puissiez recreer la situation:
(normalement l'url procède à une redirection mais à confirmer)
au pire celle-ci fait une redirection, je viens de vérifier:
http://m.shozu.com

$url = "http://meteolive1.mc-wetter.de";
$UserAgent ="SonyEricssonK810i/R1KG Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1";

// Identification du domaine
preg_match('@^(?:http://)?([^/]+)@i',$url, $matches);
$Domaine = $matches[1];

processURL($url,$Domaine,$UserAgent);

function processURL($url,$Domaine,$UserAgent)
{

set_time_limit(300);

echo " URL interogee : ".$url."
";

        //Connection wap
        $ch =curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
                // Proxy wap toto
                curl_setopt($ch, CURLOPT_PROXY, '000.000.000.000:8080');
                curl_setopt($ch, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);
                curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
                curl_setopt($ch, CURLOPT_PROXYUSERPWD, ":");

                curl_setopt($ch, CURLOPT_USERAGENT, $UserAgent);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   // a 1 pour suivre les redirections
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
        $recuppage = curl_exec ($ch);
        //echo $recuppage;
        $info = curl_getinfo($ch);
        curl_close ($ch);

    if (empty($info['http_code'])) {
            echo "No HTTP code was returned
";
            echo $url.'
';
    } else {
        echo "http_code : ".$info['http_code']."
";
        echo "url : ".$info['url']."
";
        echo "content_type : ".$info['content_type']."
";
        echo "header_size : ".$info['header_size']."
";
        echo "request_size : ".$info['request_size']."
";
        echo "filetime : ".$info['filetime']."
";
        echo "redirect_count : ".$info['redirect_count']."
";
        echo "total_time : ".$info['total_time']."
";
        echo "namelookup_time : ".$info['namelookup_time']."
";
        echo "connect_time : ".$info['connect_time']."
";
        echo "pretransfer_time : ".$info['pretransfer_time']."
";
        echo "size_upload : ".$info['size_upload']."
";
        echo "size_download : ".$info['size_download']."
";
        echo "speed_download : ".$info['speed_download']."
";
        echo "speed_upload : ".$info['speed_upload']."
";
        echo "download_content_length : ".$info['download_content_length']."
";
        echo "upload_content_length : ".$info['upload_content_length']."
";
        echo "starttransfer_time : ".$info['starttransfer_time']."
";
        echo "redirect_time : ".$info['redirect_time']."
";
        //echo '

';
        //echo $recuppage.'
';
        //echo '

';
        echo "Domaine = ".$Domaine;
    }
}

 
Autodidact, je ne demande qu'à apprendre... Merci de votre aide
Commenter la réponse de M000004965
Messages postés
147
Date d'inscription
mercredi 3 décembre 2003
Dernière intervention
12 juin 2008
0
Merci
Ho Ho,

en fait après une analyse approfondie, il semble que je récupère l'url après redirection grace à
echo "url : ".$info['url']."
";
En effet, lorsqu'il y a redirection le contenue de cette variable retournée par CURL contient l'url exacte après redirection.
Je ne l'avais pas vue car sur plus de 1100 url avec les quelles je travaille, seule 5 procèdent à des redirections

Autodidact, je ne demande qu'à apprendre... Merci de votre aide
Commenter la réponse de M000004965

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.