Analyse d'une url

ddolku Messages postés 6 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 14 septembre 2010 - 6 janv. 2009 à 18:06
Dadanaute Messages postés 2 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 8 février 2009 - 8 févr. 2009 à 12:27
Bonjour ,

Je désire ajouter en php une analyse d'url sur ma base de donnée.

j'ai des url a analysé qui sont soit , 200 OK ou en 302 Found .

je souhaite faire un code qui puisse me dire quelles sont les adresse valide 200 et non valide 302.

Merci pour votre aide precieuse.

Cordialement

10 réponses

Teclis01 Messages postés 1423 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 29 décembre 2012 4
6 janv. 2009 à 20:52
peut etre ceci ...
http://fr.php.net/curl

Il vaut mieux poser une question et passer pour bête que le rester toute sa vie

 Les geeks n'ont pas une case en moins ils commencent juste à compter à partir de zéro
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 janv. 2009 à 21:22
Salut,

302, non valide ??

Bon ok, j'imagine que tu la désigne comme telle pour des raisons particulières, mais un code 302 est valide et abouti.

Comme Teclis, je pense que curl est la meilleure solution ... quand je pense qu'il y a peu j'ai codé un robot d'indexation qu'avec les sockets

Jette notamment un oeil aux options curl : CURLOPT_NOBODY et CURLOPT_HEADER

Cordialement,

Kohntark -
0
ddolku Messages postés 6 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 14 septembre 2010
6 janv. 2009 à 21:26
Merci beaucoup , pour vos deux réponse .
mais je suis débutant et je ne comprend pas tellement les informations données dans ce lien.

Je ne veux pas être fénéant , mais je ne m'en sort pas et m'arrache même les cheveux , car je ne trouve pas la solution.

Pouvez vous m'aider encore un peux !

Merci
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 janv. 2009 à 22:20
La solution est :
Fais comme moi, et beaucoup d'autres, lis, teste, arrache toi les cheveux, c'est comme cela qu'on avance.

Un exemple tout bête :
$url = 'http://www.phpcs.com/forum/';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_NOBODY, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 45);
$t = curl_exec($curl);
echo $t;

Donnera :
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 71313
Content-Type: text/html; charset=iso-8859-15
Server: Microsoft-IIS/7.0
Set-Cookie: ASP.NET_SessionId=1ljck54530w0qp45541hai55; path=/; HttpOnly
p3p: CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Tue, 06 Jan 2009 21:14:11 GMT
Connection: close 


A partir de ce résultat il est très facile de trouver le "200" avec une regex basique.
Je te laisse le soin de te renseigner sur les fonctions curl que j'utilise dans cet exemple.

Cordialement,

Kohntark -
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ddolku Messages postés 6 Date d'inscription mardi 6 janvier 2009 Statut Membre Dernière intervention 14 septembre 2010
6 janv. 2009 à 23:44
voici mon code , merci infiniment.

<?php


$url = 'http://www.phpcs.com';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_NOBODY, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 45);
$t = curl_exec($curl);
?>
<?php
if (preg_match("#^HTTP/1.1 200#", $t))
{
echo 'VRAI';
}
else
{
echo 'FAUX';
}
?>
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 janv. 2009 à 00:28
cool, t'as encore des cheveux ??

Par contre, gaffe à ta regex, tu peux très bien avoir des choses comme ça :
HTTP/1.0 200 OK

... et là tu retournera FAUX alors qu'elle est valide.

Et pour le CURLOPT_TIMEOUT, si tu n'as qu'une url à la fois a analyser, tu peux baisser la valeur, par exemple 10 secondes (ce qui fait déjà beaucoup) Ça te permettra de ne pas attendre une éternité si une url n'existe pas.

Par ailleurs il y a un très gros problème dans ton code : fallait bien que j'en rajoute.
Au risque de ne pas mettre bien fait comprendre je répète : tout dépend de ce que tu souhaites faire.

.. mais imagine le test de http://blogs.codes-sources.com/MainFeed.aspx
Ton code va retourner FAUX, alors que l'url aboutie.
Pourquoi ?
Parce que la réponse du serveur est celle ci :

HTTP/1.1 302 Found
Date: Tue, 06 Jan 2009 23:03:16 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
CommunityServer: 2.1.61019.2
Location: http://feeds.feedburner.com/BlogsCodes-sources
Cache-Control: private
Content-Length: 0

HTTP/1.0 200 OK
Date: Tue, 06 Jan 2009 23:04:08 GMT
Server: Apache
X-FB-Host: app81
Last-Modified: Tue, 06 Jan 2009 21:53:26 GMT
ETag: 97zJ5jXFw7tOMnekeUbyEV8Bp14
Content-Length: 67193
P3P: CP="ALL DSP COR NID CUR OUR NOR"
Keep-Alive: timeout=30, max=100
Connection: keep-alive
Content-Type: text/xml;charset=utf-8

blablabla la page existe mais redirige temporairement ton browser sur une autre adresse. Avec ta regex tu ne détectera pas le HTTP/1.0 200 de part le ^  (et le "0", mais je l'ai déjà dit)

En bref, si tu veux faire une réelle analyse d'url, il te faut impérativement traiter tous les codes de réponses HTTP, sans quoi tu auras forcement de mauvais résulats.

N'hésite pas à poster tes codes si tu décides de les améliorer. Ca m'intéresse, je développe depuis 2/3 jours un robot d'analyse de liens qui a pour but l'analyse des liens présents sur un site donné (réponse HTTP, liens morts, temps d'accès, etc ... etc ...)

Bonne continuation,

Kohntark -
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 janv. 2009 à 00:35
Une dernière chose :
Puisque tu sembles tester plusieurs url, jette un oeil à curl_multi_init, tu gagnera un temps d'exécution phénoménale.

Cordialement,

Kohntark -
0
Dadanaute Messages postés 2 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 8 février 2009
25 janv. 2009 à 20:32
Salut à tous,

j'utilise se script il est géniale mais je voudrais faire un fonction en plus et savoir si vous savez comment réaliser sa.

en faite je fourni a mes partenaire un lien de parrainage et je voulais savoir si il y avais moyens par ce scripte qu'il me confirme que se lien est bien présent sur les site en partenariat ?

Merci d'avance
David
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
26 janv. 2009 à 15:58
Salut,

Oui, c'est quasiment la même chose, sauf qu'il faut supprimer :
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_NOBODY, 1);
et modifier la regex.
En plus il te faudra chercher dans tout le site du partenaire et là c'est un peu plus "chaud" car il y a de très nombreux moyens d'appeler une page.

Kohntark-
0
Dadanaute Messages postés 2 Date d'inscription jeudi 23 octobre 2008 Statut Membre Dernière intervention 8 février 2009
8 févr. 2009 à 12:27
Bonjour,

je suis désolé je n'arrive pas à comprendre comment faire
j'ai le code suivant :
<?php

$url = 'http://www.daceradio.com';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 45);
$t = curl_exec($curl);
?>
donc modifier comme tu ma marquer mais ma if je voudrais quel vérifie ce code présent sur mon site : royaltchat et je voudrais bien avoir la possibilité en luis modifiant en php les valeur des site ou il doit vérifier et les valeurs de la if pour pouvoir vérifier tous mes partenaires.

dsl de vous embéter avec ça.

merci d'avance
david
0
Rejoignez-nous