Internet
Internet
Télécharger un fichier d'internet
Télécharger un fichier d'internet
Aspirer un site internet
Aspirer un site internet
Pour aspirer un site internet
$ wget -r -l5 -k -E "http://www.l_adresse_du_site.a_recuperer.com"
-r : récursif sur le site
-l5 : cinq niveaux de récursion au maximum
-k : convertir les destinations des liens pour une lecture locale
-E : convertir les types de fichier au format HTML (pour éviter que la lecture de sites en PHP ne foire en lecture sous Firefox).
A l'aide de l'outil httrack
$ sudo apt-get install httrack
Pour aspirer le site :
$ httrack --mirror http://mon-site.com
Pour mettre à jour le site aspirer (se placer dans le dossier du site):
$ httrack --update
Authentification
Et comment fait-on sur un site où l'on doit s'authentifier au préalable ? Peut-on ajouter les id/pass en ligne de commande ?
Authentification
Je pense que c'est possible.
Avec wget, il est possible d'utiliser des cookies pour la gestion de l'authentification.
Voir la doc ici
Si tu veux aspirer un site
Si tu veux aspirer un site avec authentification, tu peux essayer de passer les identifiants en ligne de commande avec wget en utilisant l'option --http-user et --http-password. Ça devrait ressembler à quelque chose comme :
```bash
wget --http-user=ton_identifiant --http-password=ton_mot_de_passe -r -l5 -k -E "http://www.l_adresse_du_site_a_recuperer.com"
Sinon, une autre méthode consiste à utiliser les cookies d'une session déjà ouverte. Tu démarres une session dans ton navigateur, exportes les cookies, puis les réutilises dans wget avec l'option --load-cookies. C'est un peu plus technique mais ça peut être bien utile si tu as des étapes d'authentification plus complexes.
Pour ceux qui utilisent httrack, je crois qu'il y a aussi moyen de gérer les cookies, mais c’est un peu plus galère. Peut-être que d’autres ici ont déjà testé et pourraient confirmer ?
Je bosse en agence web, et quand le besoin se présente c'est comme cela que je procède.
CURL: Afficher les informations SSL d'un domaine
CURL: Afficher les informations SSL d'un domaine
La commande curl est très utile pour afficher, tester etc... un site internet.
On peut également utiliser la commande curl pour afficher les informations SSL des sites internet.
Par exemple, avec mon site internet https://quennec.fr
# curl -I --verbose https://quennec.fr* Trying 51.159.70.99:443...
* TCP_NODELAY set
* Connected to quennec.fr (51.159.70.99) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
* CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
* subject: CN=quennec.fr
* start date: Mar 11 07:02:14 2024 GMT
* expire date: Jun 9 07:02:13 2024 GMT
* subjectAltName: host "quennec.fr" matched cert's "quennec.fr"
* issuer: C=US; O=Let's Encrypt; CN=R3
* SSL certificate verify ok.
...
<
* Connection #0 to host quennec.fr left intact
On peut voir qui a émis le certificat, ses dates de validité etc etc ...
Et sinon, la commande openssl permet de récupérer le certificat complet, voir openssl : Récupérer un certificat distant
CURL: Poster des données et des fichiers via un formulaire
CURL: Poster des données et des fichiers via un formulaire
La commande CURL peut être utilisée pour poster des données via un formulaire WEB.
Exemple avec la commande suivante:
$ curl \
--insecure \
--request POST \
--header 'Content-Type: multipart/form-data' \
'https://www.monsite.com/monformulaire' \
-F 'username=toto' \
-F 'password=pass4toto' \
-F 'date-de-naissance=11-02-82' \
-F "file=@monfichier.txt" \
--include
Détail des options:
--insecure permet d'utiliser une connexion sécurisée (https) avec un certificat auto-signé (non reconnu)
--request POST permet d'indiquer le type de la requête
--header 'Content-Type: multipart/form-data' permet d'indiquer l'en-tête de la requête
-F permet d'indiquer les valeurs pour les différents champs du formulaire
--include permet de récupérer l'en-tête de la réponse
Pour poster un fichier, il est nécessaire de préfixer le nom du fichier avec l'arobase (@)
CURL: appeler un webservice SOAP
CURL: appeler un webservice SOAP
Pour appeler un webservice SOAP avec la commande CURL, il suffit d'indiquer le bon content-type dans le header ainsi que le nom du fichier XML à envoyer.
# curl \
> --header "content-type: application/soap+xml; charset=utf-8" \
> --data @request.xml \
> http://$SERVER:$PORT/$ENDPOINT
Ne pas oublier le symbole '@' devant le nom du fichier XML pour indiquer à la commande CURL qu'il s'agit d'un fichier.
CURL: utiliser un serveur proxy
CURL: utiliser un serveur proxy
Pour utiliser un serveur proxy avec la commande curl, il suffit tout simplement de créer dans son home un fichier .curlrc
Il est possible d'y ajouter différents paramètres liés à la commande curl
$ cat .curlrc
--proxy-user "user_toto:pass_toto"
--proxy "http://proxy.mondomaine.local:3128/"
--noproxy "localhost,127.0.0.1,mondomaine.local"
Ne pas oublier de paramétrer les accès au fichier
$ chmod 0600 .curlrc
Créer un sprite CSS sans se prendre la tête
Créer un sprite CSS sans se prendre la tête
Qu'est ce qu'un sprite CSS ?
En CSS, un sprite est une image unique regroupant plusieurs images différentes.
Cela permet de réduire les requêtes http pour les images insérées dans une page html.
Les positions absolues de chaque images sont indiquées dans un fichier css.
Avec ce procédé, l'insertion d'une image dans une page html ne se fait plus avec la balise <img> mais avec une balise <div> ayant comme nom de "class" celui correspondant à l'image souhaitée et indiqué dans le fichier css.
Il existe sous Debian/Ubuntu, mais également pour Windows et OSX, une commande qui permet de générer un sprite CSS à partir d'un dossier contenant des images.
Cette commande se nomme Glue.
Pour l'installer sous Debian/Ubuntu :
$ sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev python-dev python-pip
$ sudo pip install glue
ou
$ sudo apt-get install glue-sprite
Créer un sprite CSS tout simplement
$ glue source_dir output_dir
Par exemple :
$ glue famfamfam_flag_icons/png sprite
Le dossier famfamfam_flag_icons/png contient exactement 247 images PNG et la commande glue va donc créer un unique fichier PNG dans le dossier sprite regroupant toutes les images et un fichier css indiquant les positions de chaque image.
...
Il est possible de générer également la page html permettant de visualiser le résultat en ajoutant l'option --html.
$ glue famfamfam_flag_icons/png sprite --html
$ ls -1 sprite/
png.css
png.html
png.png
La commande glue génère les fichiers css, html et png en fonction du nom du dossier indiqué en source.
Par défaut, le nom des "class" commence par sprite-leNomDuDossierSource-leNomDuFichier.
$ glue famfamfam_flag_icons/png sprite --namespace=monSprite
La liste complète des options est disponible avec l'option -h.
$ glue -h
Voici un exemple de l'image globale générée à l'aide de la commande glue.