7

Я пытаюсь использовать Wget для загрузки своих личных страниц GitHub, но я не могу пройти через экран входа в систему.

Как отправить 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

Вот форма HTML-код страницы входа в систему 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>

1 ответ1

9

Вы делаете несколько ошибок, не делая то, что сделал бы ваш браузер:

  • Вам необходимо отправить запрос POST с учетными данными для входа в действие формы, т.е. https://github.com/session .
  • Необходимо указать все параметры формы, включая скрытый в процентах скрытый параметр формы authenticity_token .
  • Вам необходимо предоставить куки сеанса, установленные /login .

Единственное, чего я не ожидал, это установки реферера.


Что тебе необходимо сделать:

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

Это запросит страницу входа в систему, сохранит сеанс и напечатает значение скрытой формы токена CSRF (плюс некоторый окружающий HTML).

Теперь войдите в систему после процентного кодирования всех параметров, особенно значения скрытого параметра формы 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 , как при входе в браузер.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .