0

I'm using the request library to log in to a page that contains the following form:

<form action="login.php" method="post" id="login">
        <input type="hidden" name="__CSRFToken__" value="022d7665c7dc20683af1a66680560500f9ad4770" />        <input type="hidden" name="do" value="scplogin">
        <fieldset>
        <input type="text" name="userid" id="name" value="" placeholder="E-mail ou Usuário"
            autofocus autocorrect="off" autocapitalize="off">
        <input type="password" name="passwd" id="pass" placeholder="Senha" autocorrect="off" autocapitalize="off">
                        <button class="submit button pull-right" type="submit" name="submit"><i class="icon-signin"></i>Login</button>
        </fieldset>
    </form>

I used the following code but I did not succeed

Import requests
from bs4 import BeautifulSoup

session = requests.Session()



url = "https://page.with.form/scp/login.php"


# Retrieve the CSRF token first
soup = BeautifulSoup(client.get(url).content)
csrftoken = soup.find('input', dict(name='__CSRFToken__'))['value']
print(csrftoken)

params = {'__CSRFToken__': csrftoken, 'do': 'scplogin', 'passwd':'password', 'submit':'', 'userid':'username'}

s = session.post(url,params)
print("Cookie is set to:")
print(s.cookies.get_dict())
print("----------------")

print(s.text)

Can someone help me? Thank you

SlowHusky
  • 97
  • 1
  • 1
  • 10
  • [If the csrf token is a cookie](https://stackoverflow.com/q/20504846/8079103), shouldn't it be something like `s = session.post(url, params, cookies={'__CSRFToken__': csrftoken}` ? – G_M Mar 04 '18 at 01:19
  • Possible duplicate of [Passing csrftoken with python Requests](https://stackoverflow.com/questions/13567507/passing-csrftoken-with-python-requests) – Shubhitgarg Mar 04 '18 at 03:52

1 Answers1

0

try this snippet:

import requests
from bs4 import BeautifulSoup
client = requests.session()
soup = BeautifulSoup(client.get(url).content, features="lxml")
# print(soup)
csrftoken = soup.find('input', dict(name='csrftoken'))['value']
Tal Folkman
  • 2,368
  • 1
  • 7
  • 21