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>
Lorraine Bernard
la source

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.

Daniel Beck
la source
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