Почему это, вероятно, не работает
На этом сайте использовалась защита от подделки сайтов с перекрестными запросами, которая скрывает скрытый скрытый элемент текстового поля в теле формы, чтобы обеспечить доступ к сайту.прежде чем позволить им войти в систему.Вы можете убедиться в этом сами, проверяя HTML.
<div style="display:none">
<input type="hidden" value="f8cbcfecec95c2405222c3cd0f951f6783aa329c" name="kdsowie31j4k1jlf913">
</div>
Когда я удаляю элементы стиля CSS display:none
и hidden
, появляется скрытое текстовое поле.
Когда вы заходите на этот сайт в обычном режиме, это значение также отправляется, и они узнают, что это вы.
Поскольку ваши запросы до сих порPowerShell не включил это критическое значение, поэтому, вероятно, вы получили 401
и другие несанкционированные ошибки.
Вам нужно будет получить этот токен и отправить его, чтобы он заработал. Вы не можете просто получить его один раз и жестко закодировать в свои сценарии , так как их значения обычно истекают после первого использования или каждые столько часов.Я проверил, и, похоже, их срок действия очень быстро
Получение токена
Получить этот токен не сложно.Поскольку это единственный скрытый элемент в форме, мы можем использовать этот атрибут для его извлечения.
$Request = Invoke-WebRequest -Uri https://www.podbean.com/login -SessionVariable Session -UseBasicParsing -UseDefaultCredentials
$TokenValue = ''
ForEach($field in $Request.InputFields){
if ($field.type -eq 'hidden'){
$TokenValue = [psCustomObject]@{Name=$field.name;Value=$field.Value}
"Token value found! `n`t`tElement Name:`t$($TokenValue.Name)`n`t`tElement Value:`t$($TokenValue.Value)"
}
}
При обнаружении значения токена Antiforgery / CRSF будет отображаться следующее.
Затем можно выпекатьэто значение в вашей форме, как вы пытались сделать ранее, и посмотрите, куда оно вас приведет.
$header = @{
'__RequestVerificationToken' = $TokenValue
}
$form = @{
$TokenValue.Name = $TokenValue.Value
LoginForm_password = $password
LoginForm_username = $username
}
$result = Invoke-WebRequest 'https://www.podbean.com/login' -header $header -SessionVariable Session -Form $form -Method POST
Вам придется немного поиграть с этим, но я думаю, что это должно привести вас на правильный путь,Если это не работает, я бы удалил $header
и посмотрел, поможет ли это.Я написал сообщение в блоге на эту тему и с более подробной информацией здесь, , если вы хотите прочитать больше .
Более легкий маршрут
PodBean также предлагает API, который вы можете использовать для входа в свои сервисы.Это было бы намного проще, чем то, что вы пытаетесь сделать, потому что вместо очистки форм или веб-автоматизации вы могли бы делать простые вызовы методов Rest, которые возвращали бы JSON.В 9 случаях из 10, если API существует, вы должны использовать его по этой простой причине:
Когда вы используете API, между вами и разработчиком программы существует «договор».оказание услуг.Они фактически пообещают не слишком сильно что-то менять, чтобы не нарушать ваш рабочий процесс.
Если вы создадите сложную автоматизацию для этой системы входа в систему, ожидайте, что она сломается достаточно часто, чтобы раздражать,так как они могут изменить форму входа в систему, CSS или любую другую вещь, которая сделает вас мертвыми в воде.
Ниже описано, как начать работу с их API. Они используют oAuth в качестве платформы аутентификации. У меня есть руководство по использованию PowerShell и oAuth здесь, , если вы застряли с oAuth.Если вы продолжите идти по пути oAuth и застрянете, сделайте еще один пост здесь, и я вам помогу.