web-dev-qa-db-ja.com

wgetでログインページを通過する方法は?

Wget を使用してプライベートGitHubページをダウンロードしようとしていますが、ログイン画面を通過できません。

ログインページのPOSTデータを使用してlogin/passwordを送信し、認証されたユーザーとして実際のページをダウンロードするにはどうすればよいですか?

これが私が出力で実行しようとしているコマンドです:

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

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.

私も次のコマンドを試しました:

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

ログインページhttps://github.com/loginのフォームHTMLコードは次のとおりです。

<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>
7

あなたはあなたのブラウザがすることをしないことによっていくつかの間違いを犯しています

  • ログイン認証情報を含むPOSTリクエストをフォームアクション、つまりhttps://github.com/sessionに送信する必要があります。
  • パーセントエンコードされた非表示フォームパラメータauthenticity_tokenを含む、すべてのフォームパラメータを指定する必要があります。
  • /loginで設定されたセッションCookieを提供する必要があります。

私が期待していた必要のない唯一のことは、リファラーを設定することです。


するべきこと:

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

これにより、ログインページが要求され、セッションが保存され、 [〜#〜] csrf [〜#〜] トークンの非表示フォーム値(および周囲のHTML)が出力されます。

percent-encoding すべてのパラメーター、特に句読点を含むことが多い非表示フォームパラメーターauthenticity_tokenの値の後にログインします。

 $ 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

ブラウザにログインするときと同じように、少しバウンドしてhttps://github.comになります。

9
Daniel Beck