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')