Un anneau pour les gouverner tous
Aller à la navigation
Aller à la recherche
Le wiki : Accueil - Administrateur - Bureautique - Développeur - Intégrateur - Marketing - Multimédia - Objets numériques - Jeux - We make Hack
Un anneau pour les gouverner tous
« Trois Anneaux pour les rois elfes sous le ciel, Sept pour les seigneurs nains dans leurs demeures de pierre, Neuf pour les hommes mortels destinés au trépas, Un pour le Seigneur des Ténèbres sur son sombre trône, Au pays de Mordor où s'étendent les ombres Un Anneau pour les gouverner tous Un Anneau pour les trouver Un Anneau pour les amener tous, Et dans les ténèbres les lier Au pays de Mordor où s'étendent les ombres. »
Objectif
S'identifier sur un site web distant. Valider un captcha automatiquement. Récupérer la valeur d'un compte à rebours et l'afficher.
Installer cURL
Curl est activé sur la plupart des hébergeurs de sites.
Utiliser cURL en Shell Bash sous GNU/Linux.
curl -L -O lien/fichier.ext > fichier.ext
Installer PHP cURL
Lister les paquets curl déjà installés : dpkg -l |awk '/php/ {print $1 " "$2 " "$3}' |grep curl Plus rapide : dpkg -l |awk '/curl/ {print $1 " "$2 " "$3}' |grep php
apt-cache search Curl PHP
php-curl
- CURL module for PHP [default]php-http-request2
- Provides an easy way to perform HTTP requestsphp7.0-curl
- CURL module for PHPphp7.1-curl
- CURL module for PHP
sudo apt-get install php-curl
pour les distributions dérivées de Debian. Redémarrer Apache:sudo /etc/init.d/apache2 restart
.
Sous Windows cURL est disponible avec WAMP.
Il faut cependant l’activer en décommentant la ligne ;extension=php_curl.dll
en enlevant le point virgule (;) au début de ligne depuis le fichier php.ini.
Installer PHP Curl sous Xampp
Installer PHP Curl sur XAMPP.
Exemple de scripts curl php fonctionnels
Scripts curl php fonctionnels.
Identification
Plusieurs tutoriel sur Curl, ou Ajax à base de XMLHttpRequest, ou de FOpen, de file_get_contents, de Data scraping ... Se loguer avec mechanize, urllib et cookielib.
Vu également : la notion de SSO : https://fr.wikipedia.org/wiki/Authentification_unique ou encore OpenID : http://openid.net/developers/libraries/#php qui ne correspondent pas forcément à mes attentes.
Faire un Curl sur la page de login. Dans ce curl, je passe mes identifiants par requete POST. Indiquer éventuellement un user agent.
A la suite du code, indiquer la page à parser. Lancer le parser en DomDocument.
Mechanize
WWW::Mechanize apt-get install libwww-mechanize-perl man WWW::Mechanize
Poster automatiquement avec XRumer
https://fr.wikipedia.org/wiki/XRumer
Avec PHP
Afficher une page sur son site avec cURL
..
Test 1 ne fonctionne pas pour l'identification
/* Test connexion site distant. */$url = "https://wiki.visionduweb.fr/index.php?title=Sp%C3%A9cial:Connexion";
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/4.0");
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, "Login:Password");
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
echo $result;
echo $error;
En cas de problème de certificat, tester : # SSL certificate problem: self signed certificate.CURLOPT_CAINFO
CURLOPT_CAPATH
En cas de problème de cookie, tester :curl_setopt($ch, CURLOPT_COOKIEJAR, $moncookie);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
/* Passer éventuellement true à 0 */
Dans mon test de connexion au wiki, avec curl, j'arrive simplement sur la page d'accueil du wiki, sur le formulaire, avec le choix des utilisateurs mémorisés proposés par le navigateur, mais, le login automatique ne se fait pas. Je test avec un site distant, Mellowads. Idem, j'arrive bien à voir la page d'accueil, mais, ici, je n'arrive pas à simuler le clic sur le bouton pour me connecter. Je test avec un autre site encore, Idem, j'arrive sur la page d'accueil, sans pouvoir me loguer automatiquement.
Résoudre le problème de connexion avec l'équipe SEO de GHSTools : http://www.ghstools.fr/forum/viewtopic.php?f=17&t=4283
curl_setopt($ch, CURLOPT_POST, 1);
Test 2 - Vérifier les nouveaux messages privés sur le forum alsacreations
Se connecter à son compte sur le site puis stocker les cookies de session, Requêter la page désirée en passant les cookies de session, Se déconnecter du site.
Le script ne retourne pas l'information attendue.
<?php
$timeout = 10;
$alsa_username = 'Nom utilisateur';
$alsa_password = 'Mot de passe utilisateur';
$cookies_file = __DIR__.'/cookies.txt';
/**************************************************
Première requête : Connexion
**************************************************/
$url = "http://www.alsacreations.com/ident/login/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if (preg_match('`^https://`i', $url))
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
// Forcer cURL à utiliser un nouveau cookie de session
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
'name' => $alsa_username,
'password' => $alsa_password,
'login-submit' => 'Connexion'
));
// Fichier dans lequel cURL va écrire les cookies
// (pour y stocker les cookies de session)
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies_file);
curl_exec($ch);
curl_close($ch);
/**************************************************
Seconde requête : Récupération du contenu
**************************************************/
$url = "https://www.alsacreations.com/pm/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if (preg_match('`^https://`i', $url))
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
// Fichier dans lequel cURL va lire les cookies
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies_file);
$page_content = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
/**************************************************
Troisème requête : Déconnexion
**************************************************/
$url = "http://www.alsacreations.com/ident/logout/";
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
if (preg_match('`^https://`i', $url))
{
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
}
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_exec($ch);
curl_close($ch);
// Effacement du fichier de stockage des cookies
if (file_exists($cookies_file))
unlink($cookies_file);
/****************************************
Affichage
****************************************/
if ($http_code == 200)
{
if (preg_match('`Vous avez (\d+) nouveaux messages`i', $page_content, $matches))
echo $matches[1]. ' nouveau(x) message(s) sur le forum alsacreations.';
else
echo 'Aucun message sur le forum alsacreations.';
}
else
{
echo 'Une erreur est survenue lors de la connexion au forum alsacreations : '. $http_code;
}
?>
Source pour un script qui ne fonctionne pas. Son développeur est informé : http://oseox.fr/curl/session.html
Test 3 - Vérifier les nouveaux messages privés sur le forum développez
Se connecter à son compte sur le site puis stocker les cookies de session, Requêter la page désirée en passant les cookies de session, Se déconnecter du site.
Identifier les champs du formulaire de connexion
Identifier dans le code source HTML le nom des champs du formulaire de connexion. Pour le nom de la variable bouton submit, faut'il utiliser la valeur name="" ou value="" du formulaire cible ? Peut être name = value ?
$postfields = array
(
'nomchamp1' => 'valeurlogin',
'nomchamp2' => 'valeurpass',
'nomboutonsubmit' => ?
);
Source : Syntaxe curl pour remplir un formulaire distant : https://www.developpez.net/forums/d1342545/php/langage/debuter/syntaxe-curl-remplir-formulaire-distant/
Obtenir le sid
Exemple 1
$sid = $xpath->query('//input[@name="sid"]/@value')->item(0)->value;
Voir le code source de la page pour obtenir le sid.
<input type="hidden" name="sid" value="df946c6dbb9266e45b2a60977fc29d92" />
<input type="hidden" name="redirect" value="index.php" />
<input type="submit" name="login" class="btnmain" value="Connexion" tabindex="5" />
Le sid est en type hidden, à envoyer avec le login + mdp + connexion en post.
Si c'est bon le serveur envoie la session et je la stock dans cookie.txt, puis, je peux accéder a ma page privé grâce à la session qui été enregistré dans le cookie.
Exemple 2
Dans le cas d'une balise <code><div></code> ayant une class avatarIcon. Cette class n'étant sûrement utilisée qu'une seule fois dans un div, la procédure pour récupérer le sid serrait la suivante.
define('AUTHENTIFICATION', 'http://steamcommunity.com/profiles/76561197984780389');
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile(AUTHENTIFICATION);
$xpath = new DOMXPath($doc);
$sid = $xpath->query('//div[@class="avatarIcon"/a[@href=$url]')->item(0)->value;
echo $sid
https://forum.phpfrance.com/php-avance/identification-sur-site-t254642.html
Lire et passer le lien dans la bibliographie. https://forum.phpfrance.com/php-avance/identification-sur-site-t254642-45.html
Exemple 3 - Récupérer un lien
Je cherche à récupérer dans ma variable $sid ce lien: steam://friends/add/76561197984780389
<div class="actionItem">
<div class="actionItemIcon"><a href="steam://friends/add/76561197984780389"><img src="http://steamcommunity.com/public/images/skin_1/iconAddFriend.gif" width="16" height="16" border="0" /></a></div>
define('AUTHENTIFICATION', 'http://steamcommunity.com/profiles/76561197984780389');
libxml_use_internal_errors(true);
$doc = new DOMDocument();
$doc->loadHTMLFile(AUTHENTIFICATION);
$xpath = new DOMXPath($doc);
$sid = $xpath->query('//div[@class="actionItemIcon"]/a/@href')->item(0)->value;
echo $sid;
Veille sur curl
Charger un fichier avec curl : https://www.scriptol.fr/rss/curl.php Passer un captcha avec curl : http://forum.hardware.fr/hfr/Programmation/PHP/passer-captcha-curl-sujet_130580_1.htm Manuel curl-setopt : http://php.net/manual/fr/function.curl-setopt.php Automatisation de login : http://www.commentcamarche.net/forum/affich-20438891-script-automatisation-de-login-site-web http://www.lephpfacile.com/forum/1-php-mysql/7117-fonction-copy Barecode avec curl : https://www.phpflow.com/php/barcode-generation-in-php-and-with-help-of-curl/ https://www.dewep.net/realisations/utiliser-curl-php https://buzut.fr/comment-creer-un-crawler-web-en-php/
https://stackoverflow.com/questions/2044340/http-basic-authentication-whats-the-expected-browser-experience https://stackoverflow.com/questions/25969196/how-to-define-the-basic-http-authentication-using-curl-correctly https://stackoverflow.com/questions/3044315/how-to-set-the-authorization-header-using-curl https://curl.haxx.se/docs/httpscripting.html https://unix.stackexchange.com/questions/119410/using-curl-to-access-basic-auth-protected-website-via-proxy-polipo https://www.vaultproject.io/intro/getting-started/apis.html http://www.thegeekstuff.com/2012/04/curl-examples/?utm_source=feedburner http://rustyrazorblade.com/2007/05/how-to-use-curl-to-hit-a-web-api-using-http-basic-authentication/ https://www.electrictoolbox.com/php-curl-sending-username-password/ https://web.archive.org/web/20170627214120/https://wiki.earthdata.nasa.gov/display/HDD/Curl+with+URS+Authentication
Avec Python
http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml#fetching-urls https://www.developpez.net/forums/d387253/autres-langages/python-zope/reseau-web/probleme-d-identification-site-web-via-python/ http://www.voidspace.org.uk/python/articles/authentication.shtml#the-username-password
Récupérer le contenu du site avec Curl + xpath
Utiliser DOMXPath pour parser le contenu d'une page avec PHP
Créer une nouvelle instance DOM
$DOM = new DOMDocument;
Désactiver standard libxml errors
libxml_use_internal_errors(true);
Lorsque vous utilisez cette fonction, assurez-vous de supprimer votre tampon d'erreur interne (libxml_clear_errors ()). Si vous ne le faites pas et que vous l'utilisez dans un processus de longue durée, vous pouvez constater que toute votre mémoire est utilisée.
Charger le texte HTML dans l'objet DOMDocument
if (!$DOM->loadHTML($page))
Activer user error handling
{ $errors="";
foreach (libxml_get_errors() as $error) {
$errors.=$error->message.'<br/>';
}
libxml_clear_errors();
print "libxml errors:<br>$errors";
return;
}
Maintenant, l'objet DOMDocument nommé '$DOM' contient tout le texte cible sous la forme d'une structure DOM HTML. Il est prêt pour l'application de différentes méthodes et propriétés.
Initialiser un objet DOMXPath depuis l'objet DOMDocument
Initialiser l'objet DOMXPath pour les parser à venir.
$xpath = new DOMXPath($DOM);
Maintenant les méthodes XPath sont applicables sur le contenu.
Parser l'objet DOMXPath
URL de référence pour le contenu cible à parser. Elle permet de comprendre la structure HTML à interroger. : http://testing-ground.scraping.pro/blocks
$case1 = $xpath->query('//*[@id="case1"]')->item(0);
$query = 'div[not (@class="ads")]/span[1]';
$entries = $xpath->query($query, $case1);
foreach ($entries as $entry) {
echo " {$entry->firstChild->nodeValue} <br /> ";
}
Réponse de la librairie libxml avec du HTML mal formé
The libxml library gave no warning about a malformed HTML non-related to the direct DOM structure parse, yet the library has issued an error for the malformed HTML instance that is the subject of a direct parse : No warning for this case : <p><p><p> For a missed bracket: <div prod="name1" <div …> and then for the extra opened tag: <div prod="name1"><div> the library has issued an exception for the DOMXPath "query" method.
Le script fonctionnel en entier
<?php $curl = curl_init('http://testing-ground.scraping.pro/blocks'); curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); $page = curl_exec($curl); if(curl_errno($curl)) // check for execution errors { echo 'Scraper error: ' . curl_error($curl); exit; } curl_close($curl); $DOM = new DOMDocument; libxml_use_internal_errors(true); if (!$DOM->loadHTML($page)) { $errors=""; foreach (libxml_get_errors() as $error) { $errors.=$error->message."<br/>"; } libxml_clear_errors(); print "libxml errors:<br>$errors"; return; } $xpath = new DOMXPath($DOM); $case1 = $xpath->query('//*[@id="case1"]')->item(0); $query = 'div[not (@class="ads")]/span[1]'; $entries = $xpath->query($query, $case1); foreach ($entries as $entry) { echo " {$entry->firstChild->nodeValue} <br /> "; } ?>
Source d'origine du tutoriel : https://web.archive.org/web/20190722232848/http://scraping.pro/using-domxpath-for-parsing-page-content-in-php/
Valider un captcha automatiquement
Bypass un captcha.
Tester un script de validation de sites faucet
Créer le dossier Captcha sur le disque C de Windows.
Installer Firefox Installer l'extension anti-popup www.popupblocker.ir Installer l'extension imacros pour lancer le script. ( Ne fonctionne pas sur la dernière version de Firefox Quantum. )
Installer Chrome Quelle extension pour anti-popup ? Installer l'extension imacros pour lancer le script.
Créer un compte sur https://www.9kw.eu et créer une api par défaut et identifier la clé secrète de l'api. Gagner des crédits depuis https://www.9kw.eu/usercaptcha.html
Une solution alternative serrait d'utiliser l'api de 2captcha gratuite proposée par le développeur du script. Télécharger le script : https://pastebin.com/Sbd4Z6FF
Renseigner la clé secrète de l'api Chercher : SET API "YOUR API" Chercher : TAG POS=1 TYPE=INPUT ATTR=NAME:apikey CONTENT=put your 9kw api here
Renseigner votre adresse Bitcoin Chercher : put your bitcoin address here
S'inscrire sur FaucetHub avec la même adresse Bitcoin Ne pas utiliser son compte principale au risque d'être bloqué du fait de l'utilisation de robots.
S'inscrire sur les sites suivants avec la même adresse Bitcoin https://bagi.co.in/bitcoin 5 - 25 Satoshi every 5 minutes Et d'autres liens à vérifier dans le script.
S'identifier avec l'adresse Bitcoin et changer le captcha par celui de solvemedia. Le site se recharge. ( Pourquoi ? ) Remettre votre adresse Bitcoin. Valider le captcha de solvemedia.
Lancer le robot.
Transfert automatique
Script pour transférer vos gains depuis les sites suivants. Télécharger le script : https://pastebin.com/aWDaNCZP
https://bituniverse .net
Suivre les échanges dédiés à ce script : https://www.bitcoinblackhat.com/Thread-Best-Bitcoin-Faucet-Bot-UP-TO-500-Satoshi-Every-5-Minutes
Changer le USER AGENT avec cURL
curl -A "user-agent-name-here" https://www.visionduweb.fr curl --user-agent "user-agent-name-here" https://www.visionduweb.fr curl -H "User-Agent: user-Agent-Name-Here" https://www.visionduweb.fr
Source : https://www.cyberciti.biz/faq/curl-set-user-agent-command-linux-unix/ Voir aussi : https://wiki.visionduweb.fr/index.php?title=Configurer_le_fichier_.htaccess#Une_liste_de_plus_de_7000_bots_bloqu.C3.A9s_avec_.htaccess
Bibliographie
Logiciels de scraping
Comparateur sur mesure de logiciels de scraping : https://web.archive.org/web/20191118122846/http://scraping.pro/web-scraping-tools-and-services-landscape/ Zennoposter : https://zennolab.com/en/products/zennoposter/ Liste de logiciels de scraping : https://web.archive.org/web/20191112100011/http://scraping.pro/web-scraper-test-drive/ Liste de logiciels de scraping : https://web.archive.org/web/20191013041918/http://scraping.pro/test-drive-blocks/ Webextractor : http://www.webextractor.com Octoparse : https://web.archive.org/web/20190716185829/http://scraping.pro/octoparse-review/ IRobotSoft for Visual Web Scraping : http://www.irobotsoft.com Videlibri pour GNU/Linux : http://videlibri.sourceforge.net Scraper en ligne : http://www.apfy.me HandyWebExtractor : scraping.pro/download/HandyWebExtractor.exe Import io ne résout pas les Captchas : https://www.import.io
Scraping de fichiers
Scraping de fichiers .pdf : http://webdata-scraping.com/data-scraping-pdf-files-using-php/
Parser une page HTML en utilisant xpath et PHP
https://www.daniweb.com/programming/web-development/threads/250361/help-needed-with-curl-xpath-php https://www.experts-exchange.com/questions/28697763/Php-curl-xpath.html http://quabr.com/42481116/parsing-using-curl-and-xpath-in-php-an-html-page-with-before-a-form http://www.itgo.me/a/711720580429803767/php-screen-scraping-with-curl-and-xpath https://www.abdulibrahim.com/php-scraping-using-dom-and-xpath-tutorial/
Soumission automatique de formulaires Curl et PHP
NAVIGATION
PARTICIPER ET PARTAGERBienvenue sur le wiki de Amis SH. De nombreuses pages sont partagées sur ce wiki. Créer un compte utilisateur pour participer sur le wiki. Les pages présentées sur le wiki évoluent tous les jours. Certaines recherches sont peu abouties et incluent des erreurs. Utiliser la recherche interne du wiki pour trouver votre contenu. La page de discussion de Amis SH vous permet de poser vos questions. Consulter le site amis-sh.fr pour installer votre propre serveur web. Améliorer le contenu des pages avec vos retours depuis l'onglet discussion. Ce contenu ne doit pas servir à nuire à autrui ou à un système informatique. Protéger votre système Linux ou Windows avec cette page dédiée à la sécurité. |
SOUTENIR CE WIKISoutenir le wiki avec un don en monnaie numérique : AEON - Bitcoins - Bitcoins Cash - Bitcoins Gold - Bitcore - Blackcoins - Basic Attention Token - Bytecoins - Clams - Dash - Monero - Dogecoins - Ğ1 - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash OBTENIR DE LA MONNAIE NUMERIQUEObtenir gratuitement de la monnaie numérique : Miner de la cryptomonnaie. |