Work in progress: Googol

Il y a quelques personnes qui me posent des questions à propos de googol, du coup, je fais une petite page pour résumer à quoi je me suis heurté et où j'en suis de mes tentatives...

À l'origine

Googol était un simple script destiné à s'intercaler entre google et l'usager afin que ce dernier ne donne aucune information au géant du web:

google concept.png

En gros, l'usager envoie sa requête à googol, googol formule l'URL de requête vers Google, récupère les infos pertinentes sur la page de réponse, génère une page propre (sans aucun lien extérieur vers google, sans pub etc) et la restitue à l'usager. Lien

Toutefois...

Google ne facilite pas la tâche: ses pages changent régulièrement (et il faut adapter le parseur) et il finit par bannir mon serveur googol quand trop de requêtes viennent de lui.

J'ai donc un temps opté pour la transmission de la requête vers DDG puis j'ai préféré modifier Googol en profondeur pour qu'il puisse changer son moteur en interne: j'ai donc créé une classe google.php et une startpage.php pour que googol puisse changer de lui-même le temps du débannissement. Lien

startpage.png

Oui mais, bon... voilà.

Startpage s'est mis lui aussi à me bannir et à me renvoyer un captcha... Lien

  Salauds  .jpg

je lâche rien

Je me démonte pas...

... et je me lance dans l'ajout d'un troisième moteur selon le même principe: Qwant...

triforce.png

A ce stade, ça fonctionnait... Mais...

  1. ... ben ça fait quand même trois moteurs différents à maintenir (parseur+URLs etc)
  2. vu le rythme de bannissement, seul qwant était utilisé... Du coup, l'intérêt du cript ne saute pas aux yeux.

Je me remets au boulot         dans la joie .jpg

C'est reparti pour une réflexion

Là je prends le problème dans l'autre sens: au lieu de changer de moteur, je pourrais changer de serveur...

C'est une piste que j'avais explorée à une époque en faisant une sorte de chaîne de Googol qui se renvoyaient la requête.

Le problème, c'est que multiplier les googols, c'est multiplier la maintenance: c'est lourd, peu élégant et pas satisfaisant. Surtout qu'il suffirait de faire transiter la requête par un relais pour que google ne voie plus l'adresse IP du serveur Googol !

Pas con  .jpg

Je pars donc sur un script tout con qui curl l'adresse envoyée en GET et retourne la page. C'est bourrin, c'est pas sécurisé du tout, mais OSEF, c'est pour tester...


if (isset($_GET['url2get'])){
    $url=urldecode($_GET['url2get']);
    $content=file_curl_contents($url);
    $content=str_replace([''],'',$content);
    echo $url.$content;
}

Je place ledit script sur trois serveurs de test gratuits (un vieux free qui traînait et deux de chez byethost33).

On a donc:

relayid.png

Et là, c'est le drame

Quand je teste, aucun résultat de revient. La page renvoyée est vide ou presque.

relaypb.png

Alors, je teste en copiant l'URL générée par Googol et en la faisant transiter à la main par le relais avec une url du genre:


 http://www.googol.byethost9.com/?url2get=https%3A%2F%2Fwww.google.com%2Fsearch%3Fnum%3D100%26source%3Dlnms%26id%3Dhp%26start%3D0%26q%3Dtest
Et là, j'obtiens bien une page de résultats.

relaisdirect.png

J'en suis là...

Donc, quand googol interroge le relais qui interroge google, il renvoie une page vide mais quand je tape directement dans le navigateur l'adresse que googol utilise pour appeler le relais, ça fonctionne.

J'ai vérifié l'URL et j'ai viré le javascript (dans mon navigateur et dans la page) histoire d'être certain qu'il ne s'agit pas d'une requête ajax impossible à faire en backend.

EDIT :

Après avoir testé d'autres hébergeurs gratuits, j'en ai trouvé un pour qui ça marche... donc, ce sont les hébergeurs qui chient dans la colle quand on y accède via curl...

Il va falloir que je trouve d'autres serveurs pouvant héberger un script de relais...

            <link rel="stylesheet" href="https://www.warriordudimanche.net/./plugins/Galart/style.css"/>
                <link rel="stylesheet" href="https://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.css"/>
                <script src="https://www.warriordudimanche.net/./plugins/Galart/assets/lightbox.js"></script>
                <script>[].forEach.call(document.querySelectorAll("[lightbox]"), function(el) { el.lightbox = new Lightbox(el);});</script>

❝ 5 commentaires ❞

1  Eric le

Au cas où un truc tout con à tester pour CURL :
dans ton setopt :

CURLOPT_SSL_VERIFYPEER à false
CURLOPT_PROXY_SSL_VERIFYPEER à false aussi

Ça a été souvent la source de bien des emmerdes pour moi en curl :)
(et de quelques heures de débug :))

 
2  Bronco le

Omagad: je vais tester !
Je te tiens au courant
Merci!

 
3  jerry wham le

Est-ce que ça va résoudre le problème ? Pas sûr...
Sauf à avoir des centaines de serveurs relais, ce ne sont pas trois serveurs qui permettront à google de ne pas les bannir. C'est comme s'il y avait 3 serveurs googole en plus.
Je veux dire, si plusieurs requêtes parviennent le même jour de ces 3 serveurs, il ne faudra pas longtemps pour qu'ils soient identifiés. J'en veux pour preuve les instances googole que l'on a mises en place et qui sont bannies régulièrement les unes après les autres.
Le problème, c'est le captcha.
Il faudrait trouver le moyen de le résoudre à distance (le laisser s'afficher et le résoudre). Ou alors, pouvoir changer d'IP du serveur à chaque requête ?
Le problème est complexe...

 
4  Bronco le

Je pense que si on avait une dizaine de serveurs et qu'au lieu d'attendre le bannissement on faisait transiter les requêtes par un des relais au hasard, ça ferait peut-être la rue Michel.
Qu'est-ce t'en penses-t-il ?

Sinon, la résolution du captcha, je veux bien, mais c'est pas possible puisque la résolution devrait venir de l'adresse IP du serveur qui, par définition, ne peut pas exécuter le JS (et encore moins résoudre le captcha )

Con de Google.

 
5  Bronco le

Quitte à jouer, on peut pousser le bouchon:
* 3 moteurs (4 si j'ajoute DDG)
* 10 serveurs relais
On permute au hasard les relais et les moteurs et ça divise les requêtes par 30 ou 40 sur les serveurs psychorigides

 

Fil RSS des commentaires de cet article

✍ Écrire un commentaire

Inutile de poster un commentaire à la con pour vous faire de la pub, ce sera filtré et dégagé direct...

Quelle est la deuxième lettre du mot irnngz ?