Problèmes avec curl pour créer un métamoteur

Résolu/Fermé
jojonewbie Messages postés 11 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 23 août 2010 - 28 juil. 2010 à 12:04
jojonewbie Messages postés 11 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 23 août 2010 - 29 juil. 2010 à 11:47
Bonjour,

j'essaye actuellement de créer une sorte de métamoteur perso qui utilise seulement des moteurs de recherche d'une quinzaine de wikis (lesquels ne font une recherche que sur leur base de données respective). Le but étant de faire une recherche globale sur l'ensemble des wikis en utilisant les moteurs existants. J'utilise la libcurl et donc la fonction curl() pour envoyer ma requête à tous les wikis (1 par 1) puis des parsers pour « découper » le résultats sur chaque page et enfin je réaffiche tous ces morceaux de pages tous ensemble sur une page de mon site. Cela se passe plutôt bien sauf dans 2 cas :
- Problème 1 : Les wikis sur lesquelles il est nécessaire de s'identifier pour pouvoir effectuer une recherche. J'utilise curl pour envoyer les identifiants et mots de passe, ce qui semble me permettre l'accès au wiki (j'arrive à transmettre les variables $_POST). Mais quand il y a une protection de la page qui nécessite de transmettre une variable de session $_SESSION, je n'y arrive plus.
- Problème 2 : Sur les wikis foswiki (ce sont les seuls qui me pose ce problème pour l'instant), même s'il n'y a pas besoin de s'identifier pour effectuer des recherches, il y a comme une sorte de protection qui empêche curl() d'accéder à certaine page.

Si quelqu'un a une piste à me donner pour que je tente de résoudre au-moins l'un de mes 2 problèmes, ça serait cool :)

Merci

A voir également:

4 réponses

avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
28 juil. 2010 à 13:25
Salut.

1/ Il faudra, lors de la requête de connexion, indiquer un fichier où stocker les cookies. Lors de la requête pour effectuer la recherche, il faudra indiquer le fichier où sont enregistrés les cookies.
Voilà la deux options à utiliser :
CURLOPT_COOKIEFILE : Pour la requête de recherche
CURLOPT_COOKIEJAR : Pour la requête de connexion

2/ Il y a peut-être un token (jeton).
Regarde dans le code source du formulaire pour le savoir.
Si c'est le cas, il faudra le récupérer et le transmettre dans une deuxième requête.
Il faudra sans doute encore utiliser les cookies (pour la session, si le script stocke le jeton dans $_SESSION (sur le serveur du Wiki, pas sur le tiens)).
1
avion-f16 Messages postés 19244 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 17 avril 2024 4 496
Modifié par avion-f16 le 28/07/2010 à 17:26
Lorsque tu tapes directement l'adresse dans le navigateur, as-tu aussi cette erreur ?
Si non, alors essaye en modifiant l'user-agent de cURL avec (par exemple) celui-ci :
Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 GTB5

Ton ordinateur ne fait pas ce que tu veux ... mais ce que tu lui dis de faire.
1
jojonewbie Messages postés 11 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 23 août 2010
28 juil. 2010 à 16:42
Salut,

Merci, mon problème numéro 1 est entièrement résolu :) ! Effectivement, les options CURLOPT_COOKIEFILE et CURLOPT_COOKIEJAR étaient ma solution (difficile de trouver et de comprendre ce dont on a besoin dans une API d'une fonction contenant plus d'une centaine de paramètres parfois !). J'ai aussi utilisé l'option :
CURLOPT_FOLLOWLOCATION qui d'après l'API : TRUE pour suivre toutes les en-têtes "Location: " que le serveur envoie dans les en-têtes HTTP (notez que cette fonction est récursive et que PHP suivra toutes les en-têtes "Location: " qu'il trouvera à moins que CURLOPT_MAXREDIRS ne soit définie).
Je ne suis pas sûr que ce soit nécessairement utile si ce n'est lorsque l'on rencontre des fonctions de redirection telle que header() etc... Si ça peut servir à quelqu'un.

Pour ce qui de mon 2ième problème, j'avoue avoir été fortement imprécis. Il ne semble pas que des tokens soient le problème (si j'ai bien compris ce que c'était). En réalité, le problème est assez déroutant puisque même la page d'accueil d'un wiki foswiki (qui est donc accessible en rentrant directement l'url par exemple) n'est pas accessible avec curl. Pour être plus précis, voilà l'erreur que curl me retourne à la fin :

Forbidden
You don't have permission to access /foswiki on this server.
Apache/2.0.52 (Red Hat) Server at pc***** Port 80

C'est comme s'il y avait une protection contre les accès indirects...

En tout cas, encore merci. J'ai déjà bien avancé !
0
jojonewbie Messages postés 11 Date d'inscription mardi 27 juillet 2010 Statut Membre Dernière intervention 23 août 2010
29 juil. 2010 à 11:47
Bonjour

Effectivement, il suffisait d'imposer un autre useragent avec l'option CURLOPT_USERAGENT... Cela peut poser des problèmes d'affichage apparemment, mais en retravaillant le code retourné par cURL, tout s'arrange !

Donc voilà tous mes problèmes résolus, il y a plus qu'à en attendre d'autres ! Je devrais quand même m'en sortir maintenant.

Merci :)
0