Utilisation d'un proxy HTTP
Présentation
Quand on utilise des systèmes de navigation automatique (web scrapers ou web crawlers) certains sites le prennent mal et peuvent bannir les serveurs.
En conséquence, on va installer un proxy HTTP sur une machine et utiliser cette machine comme intermédiaire (proxy) pour que le scraper accède aux pages sans indiquer sa provenance réelle.
Mes besoins sont simples :
- contrôle d'accès : il faut que la machine qui crawl puisse réclamer des pages mais qu'elle soit la seule. Je ne veux pas de serveurs chinois qui me saturent la bande passante ou qui se cachent derrière mes machines.
- sans authentification si l'IP est autorisée : restons simple.
- un cache : pour éviter de trop solliciter les sites externes en cas de requêtes répétées.
Installation
Cela faisait bien longtemps que je n'avais pas utilisé de proxy et j'avais un peu oublié mes expériences passées et lointaines avec Squid. Pour se rafraîchir la mémoire, voici comment configurer ce logiciel pour qu'il soit conforme à mes besoins précédents.
Le fichier de configuration principal est, sur Debian :
/etc/squid3/squid.conf
Nous allons modifier ce fichier, en insèrant des lignes avant "http_access deny all", sinon ça ne sert à rien...
- juste pour l'IP de mon serveur :
acl panache src 10.0.0.3 http_access allow MonCrawler -
on évite de dire aux sites que l'on utilise un proxy :
forwarded_for off request_header_access Allow allow all request_header_access Authorization allow all request_header_access WWW-Authenticate allow all request_header_access Proxy-Authorization allow all request_header_access Proxy-Authenticate allow all request_header_access Cache-Control allow all request_header_access Content-Encoding allow all request_header_access Content-Length allow all request_header_access Content-Type allow all request_header_access Date allow all request_header_access Expires allow all request_header_access Host allow all request_header_access If-Modified-Since allow all request_header_access Last-Modified allow all request_header_access Location allow all request_header_access Pragma allow all request_header_access Accept allow all request_header_access Accept-Charset allow all request_header_access Accept-Encoding allow all request_header_access Accept-Language allow all request_header_access Content-Language allow all request_header_access Mime-Version allow all request_header_access Retry-After allow all request_header_access Title allow all request_header_access Connection allow all request_header_access Proxy-Connection allow all request_header_access User-Agent allow all request_header_access Cookie allow all request_header_access All deny all -
sur certains sites, l'IPv6 peut être capricieux :
dns_v4_first on
Et on peut démarrer Squid :
sudo service squid3 start
Pour aller plus loin
Un proxy est intéressant mais on peut aussi réfléchir à l'utilisation de TOR et à s'intégrer dans ce réseau.
