Como passar a página de login com o wget?

7

Estou tentando usar Wget para baixar minhas páginas particulares do GitHub, mas não consigo passar da tela de login.

Como envio o login/password usando dados de postagem na página de login e, em seguida, baixo a página atual como um usuário autenticado?

Aqui está o comando que estou tentando executar com a saída:

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

Saída do 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.

Eu também tentei o seguinte comando:

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

Aqui está o código HTML do formulário da página de login 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>
    
por Lorraine Bernard 23.11.2012 / 19:11

1 resposta

9

Você está cometendo vários erros por não fazer o que seu navegador faria :

  • Você precisa enviar a solicitação POST com as credenciais de login para a ação de formulário, por exemplo, https://github.com/session .
  • Você precisa fornecer todos os parâmetros de formulário, incluindo o parâmetro de formulário oculto percentual codificado authenticity_token .
  • Você precisa fornecer os cookies de sessão definidos por /login .

A única coisa que não exigia que eu esperaria é configurar o referenciador.

O que você precisa fazer:

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

Isso solicitará a página de login, armazenará a sessão e imprimirá o CSRF valor do formulário oculto do token (mais algum HTML circundante).

Agora faça o login após percent-encoding todos os parâmetros, especialmente o valor do parâmetro de forma oculta authenticity_token que geralmente contém pontuação:

 $ 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

Você vai se recuperar um pouco, e vai acabar em https://github.com , assim como ao fazer login no navegador.

    
por 23.11.2012 / 20:02