Noob
Noob

Reputation: 3

Python authorization

I need to write a script that is included in the personal account of my Internet provider and transmits information about the current balance.

At the moment I am stuck at the time of authorization. I found and edited such a script for myself:

import requests

url = 'https://bill.tomtel.ru/login.html'

USERNAME, PASSWORD, = 'mylogin', 'mypass'

resp = requests.get(url, auth=(USERNAME, PASSWORD))

r = requests.post(url)

print(r.content)

But this does not help to pass authorization...

I can enter this link through a browser and go to a page of this type:

https://bill.tomtel.ru/fastcom/!w3_p_main.showform?FORMNAME=QFRAME&CONFIG=CONTRACT&SID=BLABLABLA&NLS=WR

I can go through browser authorization through both links, but why can't I do this through a script?

Please help with this.

Upvotes: 0

Views: 187

Answers (2)

ChickenMinh
ChickenMinh

Reputation: 47

I think you should try this:

import requests

url = 'https://bill.tomtel.ru/signin.php'

USERNAME = input('Enter your username: ')
PASSWORD = input('Enter your password: ')
d = {
'USERNAME' : USERNAME,
'PASSWORD' : PASSWORD,
'FORMNAME' : 'QFRAME'}

session = requests.Session()

resp = session.post(url, data=d).text
if not '<TITLE>' in resp:
    print('Incorrect username or password!')
    quit()
print('Logging in ... ')
for line in resp.split('\n'):
    if 'location' in line:
        red = 'https://bill.tomtel.ru/fastcom/!w3_p_main.showform%s' % line.replace(' if (P>0) self.location.replace("', '').replace('");', '')
if not red:
    print('An error has occured')
    quit()
print('Redirecting to %s' % red)
page = session.get(red).text

print('')
print('          MAIN PAGE')
print(page)

Upvotes: 0

David542
David542

Reputation: 110083

Your browser probably has a session token/cookie stored and that is why you can access it through the browser. There are a couple issues here:

  1. It looks like you need to login to the site first -- through a POST method, not a GET. The GET is what loads the page. But once you submit the form it's going to do a POST request.
  2. Actually, using requests to login to a site is not as easy as it looks. Usually you have to find the url it's posting to (examine the developer toolbar to see the url), and you often have to pass information in addition to your username/password, such as a csrf token, a cookie, or something else.
  3. I would suggest using a browser-automator for this, perhaps something like selenium Webdriver. It makes logging into a site much simpler than using HTTP in a raw request, as it emulates a browser. I would suggest this -- it's much simpler and faster!

Another thing to note: auth=(USERNAME, PASSWORD) is not quite the username/password in the form (it's something else) but I don't think understanding that is too relevant to what you're trying to do.


Here is the url and required form data to log in:

enter image description here

Upvotes: 1

Related Questions