Портал входа в Python с веб-идентификацией и пересылкой - PullRequest
0 голосов
/ 30 ноября 2018

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

1) создать сеанс с запросом get и получить токен csrf

2) использовать токен csrf из предыдущего шага и сделать сообщение наURL портала с полезной нагрузкой, представляющей собой имя пользователя / пароль / и токен csrf (та же информация, передаваемая при использовании инструментов разработчика.

3) после шага 2, я все еще получаю p.text ниже, так как введите имя пользователя и пароль и непоказать страницу за логином и указывает, что ищет меня для логина

s = requests.Session()
g = s.get("myPortalURL")
resp = g.text
for item in resp.split("\n"):
    if "csrf_token" in item:
        print (item)
        csrfToken = item.strip().split("value=")[1].replace("\"", "").replace("/>","")

data = {'Username': self.pythonDataDict["portalUsername"], 'Password': self.pythonDataDict["portalPassword"],
           'csrf_token': csrfToken}

print ("payload= ", data)
headers = {'content-type': 'application/x-www-form-urlencoded'}
p = s.post("myPortalURL", headers=headers, data=data)
soup = BeautifulSoup(p.text)
print (p.text)

1 Ответ

0 голосов
/ 30 ноября 2018

Вот некоторые возможные проблемы с вашим кодом:

  1. Из личного опыта;URL-адрес страницы входа должен отличаться от URL-адреса главной страницы.

  2. Отсутствует информация в data, ALL необходимых данных, которые необходимо ввести в форму,

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

  4. Ваш код для получения csrf_token может быть склонен к возвращению неверных данных в зависимости от характера этого токена (хотя все токены различаются, поэтомуможет и не быть)

Кроме того, как примечание, обычно более идиоматично использовать оператор with при использовании сеанса, например

with requests.Session() as s:
    initial_response = s.get("login_url")
    # def createForm()...
    main_response = s.get("target_url", data = data, headers = headers)
    # rest of code...

ItТакже было бы очень полезно, если бы вы могли включить URL-адрес страницы, к которой вы пытаетесь получить доступ, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...