Почему запросы не могут получить доступ к защищенной странице на этом сайте? - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь получить доступ к защищенной части этого сайта: https://www.amundi -ee.com / psf / # login с этим кодом:

import requests,time,lxml

LOGIN = 'https://www.amundi-ee.com/psf/#login'
PROTECTED_PAGE = 'https://www.amundi-ee.com/psf/#avoirs'
payload = {
  'identifiant': '000000',
  'pwd': '111111',
}

headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'}

with requests.session() as s:
    s.post(LOGIN, headers=headers, data=payload)
    time.sleep(2)
    f = s.get(PROTECTED_PAGE)

Я получил обаотправить и получить код состояния 200, но я вижу, что я не подключен.Итак, я предполагаю, что в моей полезной нагрузке отсутствуют аргументы, но не могу понять, какой именно.

Это код формы (нет скрытого поля):

<form name="formulaire" role="form" class="form-horizontal form-margin" autocomplete="off">
   <div class="row clearfix">
      <div class="col-md-offset-4 col-md-3 col-sm-5 col-sm-offset-2 col-xs-11">
         <div class="form-group "><label for="identifiant" class="control-label"><i key="ui.page.login.identifier" class="i18n_resource">Identifiant</i> <span class="glyphicon glyphicon-question-sign aPopoverTrigger i18n_resource" data-toggle="popover" data-container="body" data-apopovercontent=".aPopoverContent_identifiant" data-original-title="Identifiant"></span> <span class="aPopoverContent_identifiant hidden"><i key="ui.page.login.identifier_description" class="i18n_resource">Votre identifiant correspondant à votre numéro de compte, indiqué sur vos relevés de compte d'Epargne Salariale &amp; Retraite ou votre certificat d'affiliation de votre contrat PER Entreprises.</i></span></label> <input id="identifiant" name="mail" class="form-control" type="text" value="" autocomplete="off" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAkCAYAAADo6zjiAAAAAXNSR0IArs4c6QAAArlJREFUWAndV7+LGkEUfq6i4i/UVDF2ViKYawS7HIIIgohdejtLi6sELbTJf2ETUllYWsiJIDaCip3lkRwop4VgoaJ5b+MO7ri7t+rKQQZk5v2Y7/v27ezMaAJs1Wr1y263+4HDx8PhECCfUc1kMv1BrGeLxfJUKpV+87imI/kIiT/xQSNtFPKGIr7yIgR68nuT04MQx7HKsucS0HqUee5rnHEJRr9zLf1KXFSBD23/t4BwOAzFYhGoV2t3rUAkEgGPxwPUq7W7CsBvX+SVeiURdxWgRMj7ZAJsNhuEQiHw+Xx8HlwbOwPiHBbJ9nq9kM/nwe12w36/h2azCcPhUAxfG5OwtXpWgXg8LpJTsiAIkEgk2LxrYwxAY8AEaOTcNcQE9Pt9WK1WIhm9gna7zYivjTEAjYGpXC4fpDgttGAwCIvFApbLpeQWe62YLPEdAz/JV0zpHO8HLzIB78w1NIxCFijigb0CQ9F1gOHJ6Kf7wYcJOGr8xvYBHaJ1pTgcDigUCuByucT8Xq8HrVZLcS5W4bPhFchkMoxckZVzGiogGo1qHr0ct2gaJoCO3XQ6rcSh6RPwc6B7+80tm82C3W6HzWbDNjQ9oFSBZz2JWjmxWEw8RSmHFh2J0NsE2pGwCm96J/B5fr8fksmk6J7NZtDtdsFsNvNpqrZA/1ToHwuK+HnN68jlcmC1WkWCwWAAgUBAJoCOd9re1dq/O5NaVMF/enZQuFKpKGTJXdvtFmq1mtx5tAz7ChTRdThv3gkbjcYZTSqVAqfTKfqn0ymMRqOzHMlxs4DxeCxhsf70NjWfz2EymbAYP7hYAC7UV9rDeaBTm+4SeNKJrvV6fRqSjQnrYgGI0MHfdxkSZ9Trdc6janYuXoTHfWOhCqkzgE9PF5KniwXgvvGCEx8Q4BeVUCcfS6M5NJcwCOsveWDvbwOBJXUAAAAASUVORK5CYII=&quot;); background-repeat: no-repeat; background-attachment: scroll; background-size: 16px 18px; background-position: 98% 50%; cursor: auto;">  <span class="help-block"><small class="more pointer login_lost"><span class="glyphicon glyphicon-play"></span> <i key="ui.page.login.forgot_identifier" class="i18n_resource">J'ai oublié mon identifiant</i></small></span></div>
      </div>
   </div>
   <div class="row clearfix">
      <div class="col-md-offset-4 col-md-3 col-sm-5 col-sm-offset-2 col-xs-11">
         <div class="form-group ">
            <label for="pwd" class="control-label"><i key="ui.page.login.password" class="i18n_resource">Mot de passe</i> <span class="glyphicon glyphicon-question-sign aPopoverTrigger i18n_resource" data-toggle="popover" data-container="body" data-apopovercontent=".aPopoverContent_pwd" title="" data-original-title="Mot de passe"></span> <span class="aPopoverContent_pwd hidden"><i key="ui.page.login.password_description" class="i18n_resource">S'il s'agit de votre 1ère connexion, votre mot de passe provisoire vous a été adressé dans un pli sécurisé.</i></span></label> 
            <div class="input-group"><input name="password" id="pwd" class="form-control" required="" type="password" readonly="readonly" value="" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR4nGP6zwAAAgcBApocMXEAAAAASUVORK5CYII=&quot;);"> <span class="input-group-addon"></span></div>
            <span class="help-block"><small class="more pointer password_lost"><span class="glyphicon glyphicon-play"></span> <i key="ui.page.login.forgot_password" class="i18n_resource"> J'ai oublié mon mot de passe</i></small></span> 
         </div>
      </div>
      <div class="col-md-3 col-sm-4 col-xs-12">
         <div id="num-pad"><button type="button" class="btn btn-xs">1</button> <button type="button" class="btn btn-xs">3</button> <button type="button" class="btn btn-xs">5</button> <button type="button" class="btn btn-xs">6</button> <button type="button" class="btn btn-xs">0</button> <br><button type="button" class="btn btn-xs">4</button> <button type="button" class="btn btn-xs">7</button> <button type="button" class="btn btn-xs">8</button> <button type="button" class="btn btn-xs">2</button> <button type="button" class="btn btn-xs">9</button> </div>
      </div>
   </div>
   <div class="text-center"><input type="submit" class="btn btn-primary i18n_resource" value="Valider" data-loading-text="Patientez..."> </div>
</form>

Инструменты разработчика сети Chrome: Снимок экрана здесь:
Screenshot here

Я вижу, что есть шаг аутентификации с сообщением на https://www.amundi -ee.com/ psf / authenticate , и запрошенная полезная нагрузка - это моя точная полезная нагрузка (имя пользователя / пароль).Чего мне не хватает?Что-то на стороне куки (разве это не должно обрабатываться объектом сеанса?) Или одна из страниц загружает какой-то JavaScript?

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Во-первых, вы должны проверить правильный http-запрос в браузере.

POST https://www.amundi-ee.com/psf/authenticate HTTP/1.1
Host: www.amundi-ee.com
Connection: keep-alive
Content-Length: 35
Accept: application/json, text/plain, */*
Origin: https://www.amundi-ee.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36
DNT: 1
Content-Type: application/json;charset=UTF-8
Referer: https://www.amundi-ee.com/psf/
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
Cookie: EXCV-20480=ODCBPNAKFAAA; TCPID=1181011512189835414503; xtvrn=$566107$; xtan=-; xtant=1

{"username":"313","password":"730"}

Во-вторых, запрос на сборку такой же, как и он.

Изменение: после теста код состояния ответа сервера будет 400 и произнесено:Ошибка данных JSON.Затем я изменяю свой код, отправляю данные как json.Когда этот код состояния времени равен 403. То же самое, что и я, неудачно вошел в браузер.

import requests,time,lxml
import json
url = "https://www.amundi-ee.com/psf/"
LOGIN = "https://www.amundi-ee.com/psf/authenticate"
PROTECTED_PAGE = "https://www.amundi-ee.com/psf/#avoirs"
payload = {"username":"000000","password":"111111",}

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36",
            "Referer":"https://www.amundi-ee.com/psf/",
            "Accept-Encoding": "gzip, deflate, br",
            "Content-Type": "application/json;charset=UTF-8",
            "DNT": "1",
            "Accept": "application/json, text/plain, */*",
            "Origin": "https://www.amundi-ee.com"}

with requests.session() as s:
    req = s.post(LOGIN, headers=headers, json=json.loads(json.dumps(payload)) )
    time.sleep(2)
    f = s.get(PROTECTED_PAGE,cookies = req.cookies , headers = headers)

Запрос:

POST https://www.amundi-ee.com/psf/authenticate HTTP/1.1
Host: www.amundi-ee.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36
Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Referer: https://www.amundi-ee.com/psf/
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7
Origin: https://www.amundi-ee.com
DNT: 1
Content-Type: application/json;charset=UTF-8
Content-Length: 44

{"username": "000000", "password": "111111"}
0 голосов
/ 30 сентября 2018

Я предлагаю попробовать сделать так, чтобы заголовки совпадали:

(что и ожидается в соответствии с request headers в журнале консоли)

Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Connection: keep-alive
Content-Length: 38
Content-Type: application/json;charset=UTF-8
Cookie: EXCV-20480=OHCBPNAKFAAA; TCPID=11890166566815122122; xtvrn=$566107$; xtan=-; xtant=1; TC_OPTOUT_categories=1; TC_OPTOUT=0@@@008@@@ALL; TCID=201890168471812763405; TCSESSION=201890168479863869083
Host: www.amundi-ee.com
Origin: https://www.amundi-ee.com
Referer: https://www.amundi-ee.com/psf/
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36

Вот чтокажется ожидаемым.

Кроме того, полезная нагрузка для меня такова:

payload = {
    'username': '000000',
    'password': '111111',
}

Не

payload = {
  'identifiant': '000000',
  'pwd': '111111',
}

Я понимаю, что это может быть переводом, но я все равноперепроверьте, чтобы убедиться, что ваши типы данных являются правильными.Чтобы узнать это, вы можете взглянуть на request payload в журнале консоли.

После того, как эти исправления внесены / проверены, это должно помочь вам!Просто дайте мне знать.

...