Comment passer la page de connexion avec wget?


7

J'essaie d'utiliser Wget pour télécharger mes pages privées GitHub, mais je ne peux pas dépasser l'écran de connexion.

Comment envoyer les login/passworddonnées de publication sur la page de connexion, puis télécharger la page en tant qu'utilisateur authentifié?

Voici la commande que j'essaye d'exécuter avec la sortie:

 wget --save-cookies cookies.txt \
 --post-data 'login=myUserName&password=myPassword' \
 https://github.com/login

Sortie Wget:

Resolving github.com... 207.97.227.239
Connecting to github.com|207.97.227.239|:443... connected.
HTTP request sent, awaiting response... 403 Forbidden
2012-11-23 19:58:13 ERROR 403: Forbidden.

J'ai aussi essayé la commande suivante:

 wget --save-cookies cookies.txt \
 --post-data 'authenticity_token=sPV07gM2/OHYDAT99WmawItd8R7hiTaJnBAs/b3zN9Y=&login=myUserName&password=myPassword' \
 https://github.com/login

Voici le code HTML de la page de connexion https://github.com/login,

<form accept-charset="UTF-8" action="/session" method="post"><div style="margin:0;padding:0;display:inline"><input name="authenticity_token" type="hidden" value="sPV07gM2/OHYDAT99WmawItd8R7hiTaJnBAs/b3zN9Y=" /></div> 
    <h1>Sign in <a href="https://github.com/plans">(Pricing and Signup)</a> </h1>
    <div class="formbody">

        <label for="login_field">
            Username or Email<br />
            <input autocapitalize="off" autofocus="autofocus" class="text" id="login_field" name="login" style="width: 21em;" tabindex="1" type="text" />
        </label>

        <label for="password">
            Password <a href="/sessions/forgot_password">(forgot password)</a>
            <br />
            <input autocomplete="disabled" class="text" id="password" name="password" style="width: 21em;" tabindex="2" type="password" />
        </label>

        <label class='submit_btn'>
            <input name="commit" tabindex="3" type="submit" value="Sign in" />
        </label>
    </div>
</form>

Réponses:


9

Vous faites plusieurs erreurs en ne faisant pas ce que votre navigateur ferait :

  • Vous devez envoyer la demande POST avec les informations de connexion à l'action de formulaire, c'est-à-dire https://github.com/session.
  • Vous devez fournir tous les paramètres de formulaire, y compris le paramètre de formulaire masqué codé en pourcentage authenticity_token.
  • Vous devez fournir les cookies de session définis par /login.

La seule chose que je n'aurais pas attendue, c'est la configuration du référant.


Qu'as tu besoin de faire:

$ wget --keep-session-cookies --save-cookies cookies.txt -O login.rsp https://github.com/login
$ grep authenticity_token login.rsp

Cela demandera la page de connexion, stockera la session et imprimera la valeur de formulaire masquée du jeton CSRF (plus du code HTML environnant).

Connectez-vous maintenant après avoir codé tous les paramètres, en particulier la valeur du paramètre de formulaire masqué authenticity_tokenqui contient souvent des signes de ponctuation:

 $ wget --load-cookies cookies.txt --keep-session-cookies --save-cookies cookies.txt --post-data='login=USERNAME&password=PASSWORD&authenticity_token=TOKEN_VALUE_PRINTED_BY_GREP_THEN_PERCENT_ENCODED' https://github.com/session

Vous serez un peu rebondi et vous vous retrouverez https://github.comcomme si vous vous connectiez au navigateur.


2
cela ne fonctionne plus avec "ERROR 422: Entité non traitable".
BBJ3

@ LucaG.Soave Il faut s'attendre à ce que les caractéristiques d'une non-API, comme celle-ci, changent après plus de deux ans et demi. Mais le conseil de base devrait toujours rester - faites ce que ferait votre navigateur.
Daniel Beck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.