Télécharger le site HTTPS disponible uniquement via nom d'user et mot de passe avec wget?

J'essaie de download récursivement le site Web qui est normalement disponible uniquement lorsque vous vous connectez.

J'ai un nom d'user et un mot de passe valides, mais le problème est que je dois me connecter via l'interface web, donc utiliser --user=user and --password=password n'aide pas.

wget ne télécharge qu'une page Web avec du text: Désolé cette page n'est pas disponible, peut-être que vous avez oublié de vous connecter?

Est-il possible de download?

Je ne peux pas utiliser –user, –password même à la page de connection car il n'y a pas de login de récupération de file FTP / HTTP comme mentionné dans man wget :

 --user=user --password=password Specify the username user and password password for both FTP and HTTP file resortingeval. 

La connection graphique classique est là.

Si j'essaye de faire ceci: wget --save-cookies coookies --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword' . En utilisant la méthode POST pour vous connecter et essayer de sauvegarder les cookies, le file coookies est vide et la page enregistrée est une page d'erreur.

L'URL est https://idp2.civ.cvut.cz/idp/Authn/UserPassword . En fait, quand je veux me connecter, il me redirige vers cette page et quand je me connecte avec succès, il me redirige vers la page où j'étais avant ou une page où je voulais être après la connection (exemple: https://progtest.fit.cvut.cz/ .

Les informations de session sont probablement enregistrées dans un cookie pour vous permettre de naviguer vers d'autres pages après vous être connecté.

Si tel est le cas, vous pouvez le faire en deux étapes:

  1. Utilisez les --save-cookies mycookies.txt et --keep-session-cookies wget --save-cookies mycookies.txt sur la page de connection du site Web avec vos options --username et --password
  2. Utilisez l'option wget --load-cookies mycookies.txt sur les pages suivantes que vous tentez d'extraire.

MODIFIER

Si l'option --password et --username ne fonctionne pas, vous devez find les informations envoyées au server par la page de connection et l'imiter:

  • Pour une requête GET , vous pouvez append les parameters GET directement dans l'adresse que wget doit extraire (assurez-vous de citer correctement les caractères spéciaux, etc.). L'URL ressemblerait probablement à https://the_url?user=foo&pass=bar .
  • Pour une requête POST vous pouvez utiliser l'option --post-data=the_needed_info pour utiliser la méthode de publication des informations de connection requirejses.

EDIT 2

Il semble que vous ayez en effet besoin de la méthode POST avec les j_username et j_password . Essayez --post-data='j_username=yourusername&j_password=yourpassword option de --post-data='j_username=yourusername&j_password=yourpassword de passe wget .

EDIT 3

Avec la page d'origine, j'ai pu comprendre un peu plus de ce qui se passe. Cela étant dit, je ne peux pas m'assurer que cela fonctionne parce que, eh bien, je n'ai pas (je ne veux pas) des references valides.

Cela étant dit, voici ce qui se passe:

  1. La page https://progtest.fit.cvut.cz/ définit un cookie PHPSESSID et vous présente les options de connection.
  2. En cliquant sur le button de login envoie une request à https://progtest.fit.cvut.cz/shibboleth-fit.php qui prend le cookie PHPSESSID (pas sûr s'il l'utilise) et vous redirige vers le moteur SSO avec une URL spécialement conçue juste pour vous qui ressemble à ceci: https://idp2.civ.cvut.cz/idp/profile/SAML2/Redirect/SSO?SAMLRequest=SOME_VERY_LONG_AND_UNIQUE_ID
  3. La réponse SSO définit un nouveau cookie nommé _idp_authn_lc_key et vous redirige vers la page https://idp2.civ.cvut.cz:443/idp/AuthnEngine qui vous redirige vers https://idp2.civ.cvut.cz:443/idp/Authn/UserPassword (la vraie page de connection)
  4. Vous entrez vos informations d'identification et envoyez datatables de la post j_username et j_password avec le cookie de la réponse SSO
  5. ???

Les quatre premières étapes peuvent être réalisées avec wget comme ceci:

 origin='https://progtest.fit.cvut.cz/' # Get the PHPSESSID cookie wget --save-cookies phpsid.cki --keep-session-cookies "$origin" # Get the _idp_authn_lc_key cookie wget --load-cookies phpsid.cki --save-cookies sso.cki --keep-session-cookies --header="Referer: $origin" 'https://progtest.fit.cvut.cz/shibboleth-fit.php' # Send your credentials wget --load-cookies sso.cki --save-cookies auth.cki --keep-session-cookies --post-data='j_username=usr&j_password=pwd' 'https://idp2.civ.cvut.cz/idp/Authn/UserPassword' 

Notez que wget suit la redirection tout seul, ce qui nous aide un peu dans ce cas.

Pourquoi joues-tu avec wget ? Mieux utiliser un browser sans tête pour automatiser cette tâche.

Qu'est-ce qu'un browser sans tête, requestz-vous?

Un browser sans tête est un browser Web sans interface user graphique. Ils fournissent un contrôle automatisé d'une page Web dans un environnement similaire aux browsers Web populaires, mais sont exécutés via une interface de command line ou en utilisant la communication réseau.

Deux browsers sans tête populaires sont phantomjs (javascript) et Ghost.py (python).

Solution utilisant phantomjs

D'abord, vous devrez installer phantomjs . Sur les systèmes basés sur Ubuntu, vous pouvez l'installer en utilisant le gestionnaire de packages ou vous pouvez le build à partir de la source à partir de leur page d'accueil .

 sudo apt-get install phantomjs 

Après cela, vous écrivez le script javascript et exécutez-le en utilisant phantomjs:

 phantomjs script.js 

C'est tout.

Maintenant, pour apprendre comment l'implémenter dans votre cas, rendez-vous dans son guide de démarrage rapide . Par exemple, pour vous connecter automatiquement à Facebook et prendre un instantané, vous pouvez utiliser l'essentiel fourni ici :

 // This code login's to your facebook account and takes snap shot of it. var page = require('webpage').create(); var fillLoginInfo = function(){ var frm = document.getElementById("login_form"); frm.elements["email"].value = 'your fb email/username'; frm.elements["pass"].value = 'password'; frm.submit(); } page.onLoadFinished = function(){ if(page.title == "Welcome to Facebook - Log In, Sign Up or Learn More"){ page.evaluate(fillLoginInfo); return; } else page.render('./screens/some.png'); console.log("completed"); phantom.exit(); } page.open('https://www.facebook.com/'); 

Regardez autour de la documentation pour l'implémenter pour votre cas spécifique. Si vous rencontrez des problèmes pour votre site web https raison d'erreurs ssl, exécutez votre script comme ceci:

 phantomjs --ssl-protocol=any script.js 

Solution utilisant Ghost.py

Pour installer Ghost.py, vous aurez besoin de pip :

 sudo apt-get install python-pip #On a Debian based system sudo pip install Ghost.py 

Maintenant vous avez installé Ghost.py. Maintenant, pour l'utiliser dans un script python, il suffit de suivre la documentation fournie sur sa page d'accueil . J'ai essayé d'utiliser Ghost.py sur un site web https mais ça n'a pas fonctionné pour moi. Essayez-le et voyez si cela fonctionne.

UPDATE: solution basée sur l'interface graphique

Vous pouvez également utiliser des outils comme Selenium pour automatiser le process de connection et récupérer les informations. C'est assez facile à utiliser. Vous aurez juste besoin d'installer un plugin pour votre browser à partir d' ici . Et puis vous pouvez save votre process et le rejouer plus tard.

Essayez d'utiliser 'curl'

 curl --data "j_username=value1&j_password=value2" https://idp2.civ.cvut.cz/idp/Authn/UserPassword 

Vous devrez peut-être regarder le type de réponse et définir l' 'content-type' tête 'content-type' pour qu'il corresponde; à savoir: XML, json etc

En plus des cookies, utilisez user agent comme firefox, chrome, etc. Parce que la plupart des servers détestent les gestionnaires dwonload.

Vous pouvez également utiliser le cahier de l' extension firefox

  • facile à utiliser
  • GUI

La façon dont je le ferais est la suivante: d'abord, j'utiliserais Live Headers HTTP pluggin pour firefox pour parsingr la communication. Referers et tout ce genre de choses peuvent être nécessaires. Une fois que j'ai cette information, je voudrais imiter cela avec wget sauver les cookies et le chargement en cas de besoin.