Skip to content
Advertisement

Verification for successful or failed login?

I would like to check if after the request I successfully connected to the site or not. I tried several methods that I know but nothing works. Can someone help me please?

import requests
loginhead = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8',
    'Accept-Language': 'fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3',
    'Accept-Encoding': 'gzip, deflate, br',
    'Content-Type': 'application/x-www-form-urlencoded',
    'Content-Length': '89',
    'Origin': 'https://campusvirtuel.usthb.dz',
    'Connection': 'keep-alive',
    'Referer': 'https://campusvirtuel.usthb.dz/login/index.php',
    'Cookie': 'MoodleSession=s2t3h0pkqfbb8g9rugg6lpkupg',
    'Upgrade-Insecure-Requests': '1',
    'Sec-Fetch-Dest': 'document',
    'Sec-Fetch-Mode': 'navigate',
    'Sec-Fetch-Site': 'same-origin',
    'Sec-Fetch-User': '?1',
    'DNT': '1',
    'Sec-GPC': '1'
}
user = input('Enter username: ')
pswrd = input( 'Enter password: ')
def log():
    loginurl = 'https://campusvirtuel.usthb.dz/login/index.php'
    data = {
               'username': user,
               'password': pswrd
    }
    reqlogin = requests.post(loginurl, data=data, headers=loginhead)
    print(reqlogin)
log()

Advertisement

Answer

If you logged in successfully server side will respond Set-Cookie header with authentication token.

Let’s suppose that success header looks like:

Set-Cookie: AuthenticationToken=XXXXXXXXXXXXX; path=/

In this case your code should be like this:

import requests as r

# create new session
session = r.session()

# get logintoken
pre_login_response = session.get('https://campusvirtuel.usthb.dz/login/index.php')

if 'Set-Cookie' in pre_login_response.headers:

  # cookie format is MoodleSession=XXXXXXXXXXXXX; path=/
  cookie_name, cookie_val = [x.rstrip(';') for x in pre_login_response.headers['Set-Cookie'].split(' ')[0].split('=')]

  # new session token taken
  login_token = cookie_val
else:
  raise Exception('Can`t get session token')

# set login data
login_credentials = {
  'username': 'some_login_name',
  'password': 'some_password',
  'logintoken': login_token
}

# try to login
login_response = session.post(
  'https://campusvirtuel.usthb.dz/login/index.php',
  data=login_credentials,
  headers=custom_headers
)

# Check if we have authentication token
if 'Set-Cookie' in login_response.headers:

  cookie_name, cookie_val = [x.rstrip(';') for x in login_response.headers['Set-Cookie'].split(' ')[0].split('=')]

  if cookie_name == 'AuthenticationToken':
    print('Okay we have logged in! Success!')
  else:
    print('Something went wrong we still not logged in')
else:
  print('Something went wrong we still not logged in')

The other way is to check reqlogin.text output

reqlogin.text is a login pages’s html code that means that you still not logged in. If login failed server will redirect you to login page again.

Something like:

# check if we have login button on page
if '<button type="submit" class="btn btn-primary btn-block mt-3" id="loginbtn">Connexion</button>' in reqlogin.text:
  print('That is login page')
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement