Add a CaptiveResponeParser to parse the form containing data used to renew/logo… - anticapum - Handle Università Politecnica delle Marche captive portal (HTM) hg clone https://bitbucket.org/iamleot/anticapum (DIR) Log (DIR) Files (DIR) Refs (DIR) README --- (DIR) changeset c10ce3199d0825a9896c00f0aac8bc4020175de2 (DIR) parent 9e3c70a6877f0599f55189838e11b0614551c4d7 (HTM) Author: Leonardo Taccari <iamleot@gmail.com> Date: Thu, 11 Jan 2018 22:57:42 Add a CaptiveResponeParser to parse the form containing data used to renew/logout Add a parser for the response of login(). This will parse username, ip, timestamp, sid and pulsante elements that are passed to renew connection and for to logout. Diffstat: anticapum.py | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) --- diff -r 9e3c70a6877f -r c10ce3199d08 anticapum.py --- a/anticapum.py Thu Jan 11 21:31:50 2018 +0100 +++ b/anticapum.py Thu Jan 11 22:57:42 2018 +0100 @@ -31,6 +31,7 @@ import getpass import ssl from netrc import netrc +from html.parser import HTMLParser from urllib import parse, request @@ -42,6 +43,24 @@ ANTICAPUM_SLEEP = 310 +class CaptiveResponseParser(HTMLParser): + """Parse the <form> that contains the username, ip, timestamp, sid and + pulsante attributes used to renew connections.""" + def handle_starttag(self, tag, attrs): + a = dict(attrs) + if 'id' in a: + if a['id'] == 'username': + self.username = a.get('value') + elif a['id'] == 'ip': + self.ip = a.get('value') + elif a['id'] == 'timestamp': + self.timestamp = a.get('value') + elif a['id'] == 'sid': + self.sid = a.get('value') + elif a['id'] == 'pulsante': + self.pulsante = a.get('value') + + def credential(): """Return username and password tuple using .netrc file or prompting the user interactively if no netrc entry is present.