Skip to content

Instantly share code, notes, and snippets.

@M0r13n
Last active September 14, 2020 14:59
Show Gist options
  • Save M0r13n/3e826c0bf5194b198e73d3aeca15bafe to your computer and use it in GitHub Desktop.
Save M0r13n/3e826c0bf5194b198e73d3aeca15bafe to your computer and use it in GitHub Desktop.
Requests foo
-----BEGIN CERTIFICATE-----
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
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFrDCCBJSgAwIBAgIHG2O60B4sPTANBgkqhkiG9w0BAQsFADCBlTELMAkGA1UEBhMCREUxRTBDBgNVBAoTPFZlcmVpbiB6dXIgRm9lcmRlcnVuZyBlaW5lcyBEZXV0c2NoZW4gRm9yc2NodW5nc25ldHplcyBlLiBWLjEQMA4GA1UECxMHREZOLVBLSTEtMCsGA1UEAxMkREZOLVZlcmVpbiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTE2MDUyNDExMzg0MFoXDTMxMDIyMjIzNTk1OVowgY0xCzAJBgNVBAYTAkRFMUUwQwYDVQQKDDxWZXJlaW4genVyIEZvZXJkZXJ1bmcgZWluZXMgRGV1dHNjaGVuIEZvcnNjaHVuZ3NuZXR6ZXMgZS4gVi4xEDAOBgNVBAsMB0RGTi1QS0kxJTAjBgNVBAMMHERGTi1WZXJlaW4gR2xvYmFsIElzc3VpbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdO3kcR94fhsvGadcQnjnX2aIw23IcBX8pX0to8a0Z1kzhaxuxC3+hq+B7i4vYLc5uiDoQ7lflHn8EUTbrunBtY6C+li5A4dGDTGY9HGRp5ZukrXKuaDlRh3nMF9OuL11jcUs5eutCp5eQaQW/kP+kQHC9A+e/nhiIH5+ZiE0OR41IX2WZENLZKkntwbktHZ8SyxXTP38eVC86rpNXp354ytVK4hrl7UF9U1/Isyr1ijCs7RcFJD+2oAsH/U0amgNSoDac3iSHZeTn+seWcyQUzdDoG2ieGFmudn730Qp4PIdLsDfPU8o6OBDzy0dtjGQ9PFpFSrrKgHy48+enTEzNAgMBAAGjggIFMIICATASBgNVHRMBAf8ECDAGAQH/AgEBMA4GA1UdDwEB/wQEAwIBBjApBgNVHSAEIjAgMA0GCysGAQQBga0hgiweMA8GDSsGAQQBga0hgiwBAQQwHQYDVR0OBBYEFGs6mIv58lOJ2uCtsjIeCR/oqjt0MB8GA1UdIwQYMBaAFJPj2DIm2tXxSqWRSuDqS+KiDM/hMIGPBgNVHR8EgYcwgYQwQKA+oDyGOmh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZ2xvYmFsLXJvb3QtZzItY2EvcHViL2NybC9jYWNybC5jcmwwQKA+oDyGOmh0dHA6Ly9jZHAyLnBjYS5kZm4uZGUvZ2xvYmFsLXJvb3QtZzItY2EvcHViL2NybC9jYWNybC5jcmwwgd0GCCsGAQUFBwEBBIHQMIHNMDMGCCsGAQUFBzABhidodHRwOi8vb2NzcC5wY2EuZGZuLmRlL09DU1AtU2VydmVyL09DU1AwSgYIKwYBBQUHMAKGPmh0dHA6Ly9jZHAxLnBjYS5kZm4uZGUvZ2xvYmFsLXJvb3QtZzItY2EvcHViL2NhY2VydC9jYWNlcnQuY3J0MEoGCCsGAQUFBzAChj5odHRwOi8vY2RwMi5wY2EuZGZuLmRlL2dsb2JhbC1yb290LWcyLWNhL3B1Yi9jYWNlcnQvY2FjZXJ0LmNydDANBgkqhkiG9w0BAQsFAAOCAQEAgXhFpE6kfw5V8Amxaj54zGg1qRzzlZ4/8/jfazh3iSyNta0+x/KUzaAGrrrMqLGtMwi2JIZiNkx4blDw1W5gjU9SMUOXRnXwYuRuZlHBQjFnUOVJ5zkey5/KhkjeCBT/FUsrZpugOJ8Azv2n69F/Vy3ITF/cEBGXPpYEAlyEqCk5bJT8EJIGe57u2Ea0G7UDDDjZ3LCpP3EGC7IDBzPCjUhjJSU8entXbveKBTjvuKCuL/TbB9VbhBjBqbhLzmyQGoLkuT36d/HSHzMCv1PndvncJiVBby+mG/qkE5D6fH7ZC2Bd7L/KQaBh+xFJKdioLXUV2EoY6hbvVTQiGhONBg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIFEjCCA/qgAwIBAgIJAOML1fivJdmBMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJERTErMCkGA1UECgwiVC1TeXN0ZW1zIEVudGVycHJpc2UgU2VydmljZXMgR21iSDEfMB0GA1UECwwWVC1TeXN0ZW1zIFRydXN0IENlbnRlcjElMCMGA1UEAwwcVC1UZWxlU2VjIEdsb2JhbFJvb3QgQ2xhc3MgMjAeFw0xNjAyMjIxMzM4MjJaFw0zMTAyMjIyMzU5NTlaMIGVMQswCQYDVQQGEwJERTFFMEMGA1UEChM8VmVyZWluIHp1ciBGb2VyZGVydW5nIGVpbmVzIERldXRzY2hlbiBGb3JzY2h1bmdzbmV0emVzIGUuIFYuMRAwDgYDVQQLEwdERk4tUEtJMS0wKwYDVQQDEyRERk4tVmVyZWluIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDLYNf/ZqFBzdL6h5eKc6uZTepnOVqhYIBHFU6MlbLlz87TV0uNzvhWbBVVdgfqRv3IA0VjPnDUq1SAsSOcvjcoqQn/BV0YD8SYmTezIPZmeBeHwp0OzEoy5xadrg6NKXkHACBU3BVfSpbXeLY008F0tZ3pv8B3Teq9WQfgWi9sPKUA3DW9ZQ2PfzJt8lpqS2IB7qw4NFlFNkkF2njKam1bwIFrEczSPKiL+HEayjvigN0WtGd6izbqTpEpPbNRXK2oDL6dNOPRDReDdcQ5HrCUCxLx1WmOJfS4PSu/wI7DHjulv1UQqyquF5deM87I8/QJB+MChjFGawHFEAwRx1npAgMBAAGjggF0MIIBcDAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJPj2DIm2tXxSqWRSuDqS+KiDM/hMB8GA1UdIwQYMBaAFL9ZIDYAeaCgImuM1fJh0rgsy4JKMBIGA1UdEwEB/wQIMAYBAf8CAQIwMwYDVR0gBCwwKjAPBg0rBgEEAYGtIYIsAQEEMA0GCysGAQQBga0hgiweMAgGBmeBDAECAjBMBgNVHR8ERTBDMEGgP6A9hjtodHRwOi8vcGtpMDMzNi50ZWxlc2VjLmRlL3JsL1RlbGVTZWNfR2xvYmFsUm9vdF9DbGFzc18yLmNybDCBhgYIKwYBBQUHAQEEejB4MCwGCCsGAQUFBzABhiBodHRwOi8vb2NzcDAzMzYudGVsZXNlYy5kZS9vY3NwcjBIBggrBgEFBQcwAoY8aHR0cDovL3BraTAzMzYudGVsZXNlYy5kZS9jcnQvVGVsZVNlY19HbG9iYWxSb290X0NsYXNzXzIuY2VyMA0GCSqGSIb3DQEBCwUAA4IBAQCHC/8+AptlyFYt1juamItxT9q6Kaoh+UYu9bKkD64ROHk4sw50unZdnugYgpZi20wz6N35at8yvSxMR2BVf+d0a7Qsg9h5a7a3TVALZge17bOXrerufzDmmf0i4nJNPoRb7vnPmep/11I5LqyYAER+aTu/de7QCzsazeX3DyJsR4T2pUeg/dAaNH2t0j13s+70103/w+jlkk9ZPpBHEEqwhVjAb3/4ru0IQp4e1N8ULk2PvJ6Uw+ft9hj4PEnnJqinNtgs3iLNi4LY2XjiVRKjO4dEthEL1QxSr2mMDwbf0KJTi1eYe8/9ByT0/L3D/UqSApcb8re2z2WKGqK1chk5
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
-----END CERTIFICATE-----
import os
import re
import requests as req
import logging
logging.basicConfig(level=logging.DEBUG)
CERT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'cert.pem')
LOGIN = {'username': '_', 'password': '_', 'login': 'Login'}
RE_MARK_ROW = r"^<td(.*)<\/td>$"
RE_ROWS = r">([^<]+)<"
def extract_marks(text):
"""
This methods parses a response of /studierende/leistungen into a dict containing relevant data.
Sample response:
[{
'year': 'Semester',
'name': 'Modul',
'lesson': 'Note',
'mark': 'ECTS',
'ects': 'Dozent',
'prof': 'Scheinart'
},
...
]
"""
text = text.split('Leistungsnachweise')[-1]
raw_mark_rows = [x.group() for x in re.finditer(RE_MARK_ROW, text, flags=re.MULTILINE)]
marks = [re.findall(RE_ROWS, row) for row in raw_mark_rows]
mark_keys = ['year', 'name', 'mark', 'ects', 'prof', 'type']
marks = [{key: value for (key, value) in zip(mark_keys, y)} for y in marks]
return marks
with req.Session() as sess:
logged = sess.post(
"https://studidb.informatik.uni-kiel.de:8484/studierende/login",
data=LOGIN,
allow_redirects=False,
verify=CERT
)
s_id = logged.headers['Location'][17:]
# Load welcome page to persist session data on server
sess.get(
"https://studidb.informatik.uni-kiel.de:8484/studierende/start",
params={'session_id': s_id},
verify=CERT
)
res = sess.get(
"https://studidb.informatik.uni-kiel.de:8484/studierende/leistungen",
params={'session_id': s_id},
verify=CERT
)
print(extract_marks(res.text))
@Zepcon
Copy link

Zepcon commented Sep 14, 2020

Nice one 👍

@Zepcon
Copy link

Zepcon commented Sep 14, 2020

Naaaaaaaaaaaaaaaaaaaaais 🥇

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment