Soutenir Vision du Web dans son partage de logiciels et de ressources libres

Ce mineur crée de la monnaie numérique Monero pour soutenir Vision du web.
Merci de désactiver votre bloqueur de publicité.
Aucune publicité ne sera affichée.
Le mineur utilise les ressources de votre machine pour créer gratuitement de la monnaie numérique.
Le montant des donations pour Vision du web est de 0.068570806166929 Monero.

Un anneau pour les gouverner tous

De Wiki. Analyse, Communication, Développement, Hacking.
Révision datée du 9 octobre 2018 à 03:03 par Anonymous (discussion | contributions) (Test 2 - Vérifier les nouveaux messages privés sur le forum alsacreations)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à : navigation, rechercher
Naviguer sur le site : Accueil du site - Les annuaires - Les éditoriaux - Le forum - Les outils - Les projets
 
Consulter le contenu en étant déconnecté du réseau : Exporter le sommaire de cette page vers un document PDF

Sommaire

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 requests
php7.0-curl - CURL module for PHP
php7.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

J'ai trouvé plusieurs tutoriel à base de Curl, ou d'Ajax à base de XMLHttpRequest, ou de FOpen, ou de file_get_contents, Data scraping, se loguer avec mechanize, urllib et cookielib.
Vu également, la notion de SSO : https://fr.wikipedia.org/wiki/Authentification_unique ou de OpenID : http://openid.net/developers/libraries/#php qui ne correspondent pas forcément à mes attentes.
Je fais 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, j'indique la page que je souhaite parser.
Puis je lance le parser en DomDocument.

Avec PHP

Afficher une page sur son site avec cURL

..

Test 1 ne fonctionne pas pour l'identification

/* Test connexion site distant. */
$url = "https://www.visionduweb.eu/wiki/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 le message existant : Ko.png Rendu sur Vision du web : https://www.visionduweb.eu/tester-curl.php
<?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;
}
?>
Ko.png 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.
Todo.png

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' => ?            
);
Ok.png 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
Ok.png https://forum.phpfrance.com/php-avance/identification-sur-site-t254642.html
Lire et passer le lien dans la bibliographie.
Ok-ko.png 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

Ok-ko.png Charger un fichier avec curl : https://www.scriptol.fr/rss/curl.php
Ok-ko.png Passer un captcha avec curl : http://forum.hardware.fr/hfr/Programmation/PHP/passer-captcha-curl-sujet_130580_1.htm
Ok-ko.png Manuel curl-setopt : http://php.net/manual/fr/function.curl-setopt.php
Ok-ko.png Automatisation de login : http://www.commentcamarche.net/forum/affich-20438891-script-automatisation-de-login-site-web
Ok-ko.png http://www.lephpfacile.com/forum/1-php-mysql/7117-fonction-copy
Ok-ko.png Barecode avec curl : https://www.phpflow.com/php/barcode-generation-in-php-and-with-help-of-curl/
Ok-ko.png https://www.dewep.net/realisations/utiliser-curl-php
Ok-ko.png https://buzut.fr/comment-creer-un-crawler-web-en-php/
Ok-ko.png https://stackoverflow.com/questions/2044340/http-basic-authentication-whats-the-expected-browser-experience
Ok-ko.png https://stackoverflow.com/questions/25969196/how-to-define-the-basic-http-authentication-using-curl-correctly
Ok-ko.png https://stackoverflow.com/questions/3044315/how-to-set-the-authorization-header-using-curl
Ok-ko.png https://curl.haxx.se/docs/httpscripting.html
Ok-ko.png https://unix.stackexchange.com/questions/119410/using-curl-to-access-basic-auth-protected-website-via-proxy-polipo
Ok-ko.png https://www.vaultproject.io/intro/getting-started/apis.html
Ok-ko.png http://www.thegeekstuff.com/2012/04/curl-examples/?utm_source=feedburner
Ok-ko.png http://rustyrazorblade.com/2007/05/how-to-use-curl-to-hit-a-web-api-using-http-basic-authentication/
Ok-ko.png https://www.electrictoolbox.com/php-curl-sending-username-password/
Ok-ko.png https://wiki.earthdata.nasa.gov/display/HDD/Curl+with+URS+Authentication

Avec Python

Ok-ko.png http://www.voidspace.org.uk/python/articles/urllib2_francais.shtml#fetching-urls
Ok-ko.png https://www.developpez.net/forums/d387253/autres-langages/python-zope/reseau-web/probleme-d-identification-site-web-via-python/
Ok-ko.png 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=&quot;&quot;;
    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 /> ";
 }
 ?>
Ok.png Source d'origine du tutoriel : 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

Robot.
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.
https://cnhv.co/jsrt ( Fonctionne ou ne fonctionne pas ? )
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://bituniverse.net/  1 to 20 satoshi every 5 minutes
https://huefaucet.xyz 1 to 20 satoshi every 5 minutes.
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://bitlucky.io
https://bituniverse.net
https://huefaucet.xyz
https://bitgolden.io
https://btcforclicks.io
https://bitsilver.io
Suivre les échanges dédiés à ce script : https://www.bitcoinblackhat.com/Thread-Best-Bitcoin-Faucet-Bot-UP-TO-500-Satoshi-Every-5-Minutes

Bibliographie

Logiciels de scraping

Ok-ko.png Comparateur sur mesure de logiciels de scraping : http://scraping.pro/web-scraping-tools-and-services-landscape/
Ok-ko.png Zennoposter : https://zennolab.com/en/products/zennoposter/
Ok-ko.png Liste de logiciels de scraping : http://scraping.pro/web-scraper-test-drive/
Ok-ko.png Liste de logiciels de scraping : http://scraping.pro/test-drive-blocks/
Ok-ko.png Webextractor : http://www.webextractor.com
Ok-ko.png Octoparse : http://scraping.pro/octoparse-review/
Ok-ko.png IRobotSoft for Visual Web Scraping : http://www.irobotsoft.com
Ok-ko.png Videlibri pour GNU/Linux : http://videlibri.sourceforge.net
Ok-ko.png Scraper en ligne : http://www.apfy.me
Ok-ko.png HandyWebExtractor : scraping.pro/download/HandyWebExtractor.exe
Ko.png Import io ne résout pas les Captchas : https://www.import.io

Scraping de fichiers

Ok-ko.png Scraping de fichiers .pdf : http://webdata-scraping.com/data-scraping-pdf-files-using-php/

Parser une page HTML en utilisant xpath et PHP

Ok-ko.png https://www.daniweb.com/programming/web-development/threads/250361/help-needed-with-curl-xpath-php
Ok-ko.png https://www.experts-exchange.com/questions/28697763/Php-curl-xpath.html
Ok-ko.png http://quabr.com/42481116/parsing-using-curl-and-xpath-in-php-an-html-page-with-before-a-form
Ok-ko.png http://www.itgo.me/a/711720580429803767/php-screen-scraping-with-curl-and-xpath
Ok-ko.png https://www.abdulibrahim.com/php-scraping-using-dom-and-xpath-tutorial/

Soumission automatique de formulaires Curl et PHP

Todo.png

NAVIGATION

PARTICIPER ET PARTAGER

Vous êtes sur le wiki de Vision du Web.
Les pages présentées sur le wiki évoluent tous les jours.
Certaines recherches sont peu abouties et incluent des erreurs.
Pour participer sur le wiki, créer un compte utilisateur en haut à droite.
La recherche interne du wiki permet de trouver le contenu qui vous intéresse.
Identifiez-vous pour poser vos questions sur la page de discussion de VisionDuWeb.
Améliorer le contenu des pages en faisant des propositions depuis l'onglet discussion.
Pour écrire en Markdown : Éditeur - Générateur de tableau 1 - Générateur de tableau 2.
Les informations du wiki ne doivent pas servir à nuire à autrui ou à un système informatique.
De nombreux outils gratuits sont listés et disponibles dans la boîte à outils de Vision du web.
D'autres pages du wiki peuvent correspondre à vos attentes. La liste de toutes les pages du wiki.

VALORISER LE WIKI

Valoriser le contenu partagé sur le wiki avec un don en monnaie numérique :
AEON - Bitcoins (BTC) - Bitcoins Cash - Bitcoins Gold - Bitcore (BTX) - Blackcoins - Bytecoins - Clams - Dash - Monero - Dogecoins - Ethereum - Ethereum Classique - Litecoins - Potcoins - Solarcoins - Zcash

OBTENIR DE LA MONNAIE NUMERIQUE

Obtenir gratuitement de la monnaie numérique :
Gagner des Altcoins - Miner des Altcoins.