11-11-2021 07:03 AM - edited 11-11-2021 07:04 AM
The Viptela API documentation suggests to reuse the rest API session, but I am unable to reuse the session, and also the documentation does not have an example for that,
Below code give me an error if I store the cookies in a text file and reuse it for subsequent calls.
def __init__(self): self.s = requests.Session() self.cookie_url = "https://" + base_url + "/j_security_check" self.login_data = {'j_username': username, 'j_password': password} try: self.res = self.s.post(self.cookie_url, verify=False, data=self.login_data, headers={ "Accept": "application/json" }) self.cookie = self.res.cookies.get_dict(VM_Constants.base_url)['JSESSIONID'] with open("cookies.txt", "w") as f, open("token.txt", "w") as g: f.write(self.cookie) except Exception as e: logger.critical(f"Failed to get cookies e is {e}, login={self.login_data}", exc_info=True) raise SessionException("Unable to get cookies")
and when I execute the below function after storing the cookies, I get the error
def get_omp_alarms(self): with open("cookies.txt", "r") as f: cookies = f.read() try: response = self.s.get("https://" + base_url + r"/dataservice/alarms", params={"query": json.dumps(query_active_alarms)}, verify=False, cookies={"Cookie:JSESSIONID": cookies}) logger.info(f"Vmanage query successful {response.status_code}") print(response.text) pprint(response.status_code) pprint(response.json()) return response.json() except Exception as e: logger.critical(f"Failed to get Alarms, e is {e}", exc_info=True)
I get back some random HTML page
root - INFO - 11-Nov-21 20:29:50 - message: Vmanage query successful 200 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> </head> <body onload="document.forms[0].submit()"> <noscript> <p> <strong>Note:</strong> Since your browser does not support JavaScript, you must press the Continue button once to proceed. </p> </noscript> <form action="https://cwa.xyz.com/idp/SSO.saml2" method="post"> <div> <input type="hidden" name="RelayState" value=""/> <input type="hidden" name="SAMLRequest" value="PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHNhbWwycDpBdXRoblJlcXVlc3QgQXNzZXJ0aW9uQ29uc3VtZXJTZXJ2aWNlVVJMPSJodHRwczovL3ZtYW5hZ2UuaG9uZXl3ZWxsLmNvbTo0NDMvc2FtbExvZ2luUmVzcG9uc2UiIERlc3RpbmF0aW9uPSJodHRwczovL2N3YS5ob25leXdlbGwuY29tL2lkcC9TU08uc2FtbDIiIEZvcmNlQXV0aG49ImZhbHNlIiBJRD0iYTgyMWY3NDk5YzM4ZjMxMzhpamI4NDZkYjgzZWcyIiBJc1Bhc3NpdmU9ImZhbHNlIiBJc3N1ZUluc3RhbnQ9IjIwMjEtMTEtMTFUMTQ6NTk6NTcuNDYxWiIgUHJvdG9jb2xCaW5kaW5nPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YmluZGluZ3M6SFRUUC1QT1NUIiBWZXJzaW9uPSIyLjAiIHhtbG5zOnNhbWwycD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDI6SXNzdWVyIHhtbG5zOnNhbWwyPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj52bWFuYWdlLmhvbmV5d2VsbC5jb208L3NhbWwyOklzc3Vlcj48ZHM6U2lnbmF0dXJlIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48ZHM6U2lnbmVkSW5mbz48ZHM6Q2Fub25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjxkczpTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNyc2Etc2hhMjU2Ii8+PGRzOlJlZmVyZW5jZSBVUkk9IiNhODIxZjc0OTljMzhmMzEzOGlqYjg0NmRiODNlZzIiPjxkczpUcmFuc2Zvcm1zPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjZW52ZWxvcGVkLXNpZ25hdHVyZSIvPjxkczpUcmFuc2Zvcm0gQWxnb3JpdGhtPSJodHRwOi8vd3d3LnczLm9yZy8yMDAxLzEwL3htbC1leGMtYzE0biMiLz48L2RzOlRyYW5zZm9ybXM+PGRzOkRpZ2VzdE1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMDQveG1sZW5jI3NoYTI1NiIvPjxkczpEaWdlc3RWYWx1ZT41QS9xYUwyeFVRd0lXNE1yallIQnpuUDZVQ0dORy9XMWdMbitJNm8yelUwPTwvZHM6RGlnZXN0VmFsdWU+PC9kczpSZWZlcmVuY2U+PC9kczpTaWduZWRJbmZvPjxkczpTaWduYXR1cmVWYWx1ZT5RcTNRSU5xeU0xaFdMQ3lCMThieE1rOHZ1cTIwUE1tY0xtZXJJZ2U3anljU0luS2NNYmNmaWMzWkJFY0xIWmh1TS9KSlBNWFlWRndUQUtQNnVDRXAzblgrcVM2VUEzTDZIZDR5ekRSV0RZbTRBWnFYd2c4Ni9YaENzcHVJRG5EdlNwNDB1cGUvTjJUNldUVTBUYWw2aTNNSTRnK3lCcmdTNW9mV0lLb1hsYUhuVmQ4K3NMODRtZUQwODByT2JCYmVxSVlqYlFMN1dJTzBsQkdjUU84U202Um95dnJKMjZkMS9mWUp3b3pocnJDYlB6aEZta3JxTWV4MkpJSTFrVkZPRVdQMG4vQmVkOHZ5OHd6bUM1WmlSSG1jdHRoTHk5T1RWY3NOb00zRFB2V0FXRUJLVW1aTkFQa04xUUhucTlaajNRVmg0Z3IzUysyVlIvOU1PNnJBMmc9PTwvZHM6U2lnbmF0dXJlVmFsdWU+PGRzOktleUluZm8+PGRzOlg1MDlEYXRhPjxkczpYNTA5Q2VydGlmaWNhdGU+TUlJRGtUQ0NBbm1nQXdJQkFnSWhBUC9lQVBoUHhMK3VVNHBFNDBhL1pDRS9PVGlzVXZxRTN6U3kzU21PZ3pidE1BMEdDU3FHU0liMwpEUUVCQ3dVQU1Id3hEREFLQmdOVkJBWVRBMVZUUVRFTE1Ba0dBMVVFQ0JNQ1EwRXhFVEFQQmdOVkJBY1RDRk5oYmlCS2IzTmxNUmt3CkZ3WURWUVFLRXhCRVJVWkJWVXhVSUMwZ01USXlPVFUzTVJrd0Z3WURWUVFMRXhCRVJVWkJWVXhVSUMwZ01USXlPVFUzTVJZd0ZBWUQKVlFRREV3MUVaV1poZFd4MFZHVnVZVzUwTUI0WERUSXhNRGt5TkRJd05EZzFOVm9YRFRJMk1Ea3lOREl3TkRnMU5Wb3dmREVNTUFvRwpBMVVFQmhNRFZWTkJNUXN3Q1FZRFZRUUlFd0pEUVRFUk1BOEdBMVVFQnhNSVUyRnVJRXB2YzJVeEdUQVhCZ05WQkFvVEVFUkZSa0ZWClRGUWdMU0F4TWpJNU5UY3hHVEFYQmdOVkJBc1RFRVJGUmtGVlRGUWdMU0F4TWpJNU5UY3hGakFVQmdOVkJBTVREVVJsWm1GMWJIUlUKWlc1aGJuUXdnZ0VpTUEwR0NTcUdTSWIzRFFFQkFRVUFBNElCRHdBd2dnRUtBb0lCQVFEUHlPYW9lNmpnN0VpUTVjZ0dUZVBPaXNucApDQjVidkxRZUVOSy9pd09wQnFHSkNiMUF3MjdtSVBDeHY2WU5zZldtd0lEcFdncFBUWWg2VVhjczJybW5TZG9BTzViQVlzRnFwemVECnZPand0dFd5Z29WaHlVMUU2a0c2WXdBYVllanFNRU9wQld4VjdXUXVSMEpEcVlneWNqaHd1bzFMeFlBS0s2Qkx4bVFvYVBMeCtLbWMKTVU0R1Q1bXRaWGplTkVUaW9xUGtuV2ZRVEFQOG1GT1ovc3dsVVlGWG1Bd1h3cUI4MjBGV3dVZEU4TVZFVE1QVlRNTEo2ckJWc2dzeQpTWlNma0tqNzc0Vmk1SXFsa2N2OTlyT3ljMUsvbjhDZDJaaCtsMmt5U0YvNTBQZEVGYmpZTnpSSmQ0cUZheGNhUXE5V3J1MDdPL2x2CmowRDFEZCszbnNFckFnTUJBQUV3RFFZSktvWklodmNOQVFFTEJRQURnZ0VCQUQzMUsyOFV4amdyTXErS2hPSDM2b0F4aGdjUGp5OWsKOGpPNXZQSWRlN0ZyRGhIbjZhcys3M2xScStLNEV3YmtJYWR0YThkYWs2TXdGMzZzWDJqbkd6WG9PWDVya3ZBd2M3SFRobEJFejR3QgpDYllIV1h3ekQ3WGFqZ1Z4WnhXdjMwaVNHR0Q1UEtuTWVmVUhjc1R3dkdSQk1XSTc5UkNTaFBNdUZud2tsQVpScG5CYTFjRWpaTTlzCmhCV0RWcjlTL0NUS1hBVktJa2ppSXNSTEtGeUtBWnpIbmJWa1prTE9CR3ZFYW91b1M0U0NWanZacno4NFFPRW1MVlgvckFTRkhyR0YKOSsxVVZZVERsaWNQWktqQUJDUnBTYkFjNkttelQ2SzY3RHpKQ1liaXdvSzVmWFlpMkc0QkZWMldVYkw4YThXTHNPSGNDWmd1UXFETApNak1wNExrPTwvZHM6WDUwOUNlcnRpZmljYXRlPjwvZHM6WDUwOURhdGE+PC9kczpLZXlJbmZvPjwvZHM6U2lnbmF0dXJlPjwvc2FtbDJwOkF1dGhuUmVxdWVzdD4="/> </div> <noscript> <div> <input type="submit" value="Continue"/> </div> </noscript> </form> </body> </html> 200 root - CRITICAL - 11-Nov-21 20:29:50 - message: Failed to get Alarms, e is Expecting value: line 2 column 1 (char 1) Traceback (most recent call last): File "C:\Users\H376219\PycharmProjects\test.py", line 108, in alarms pprint(response.json()) File "C:\Users\H376219\AppData\Local\Programs\Python\Python310\lib\site-packages\requests\models.py", line 910, in json return complexjson.loads(self.text, **kwargs) File "C:\Users\H376219\AppData\Local\Programs\Python\Python310\lib\json\__init__.py", line 346, in loads return _default_decoder.decode(s) File "C:\Users\H376219\AppData\Local\Programs\Python\Python310\lib\json\decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Users\H376219\AppData\Local\Programs\Python\Python310\lib\json\decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 2 column 1 (char 1)
11-11-2021 08:54 AM
@RakeshKulkarni82221 as far as I know the default session lifespan is 24 hours, and the session inactivity timeout is 30 minutes. You can also ask here https://community.cisco.com/t5/sd-wan-and-cloud-networking/bd-p/discussions-sd-wan
Hope this helps.
11-11-2021 09:04 AM
Well then why it's failing when I reuse the same cookies for subsequent calls to vmanage endpoints.
It's not clear what you mean by lifespan of the session, when I request new cookies from the same ID I get new session which is also visible in the vmanage logs.
My question is simple how do I use the same session for multiple API calls, without obtaining new session everytime I make an API call.
11-11-2021 09:52 AM - edited 11-11-2021 09:52 AM
@RakeshKulkarni82221 more details here on lifespan and API for SD-WAN auth - https://www.cisco.com/c/en/us/td/docs/routers/sdwan/configuration/sdwan-xe-gs-book/cisco-sd-wan-API-cross-site-request-forgery-prevention.html and https://developer.cisco.com/docs/sdwan/#!authentication
With API session lifespan - the response for each API call includes the projected session timeout in the authentication element. The session timeout is calculated based on the session duration specified for the user (plus the current time). A timeout occurs if the session timeout is reached before any subsequent API calls are made. If a call occurs before the projected timeout, it is reset to the current time plus the session duration.
In your case, I am unsure why in your use cases repeated API endpoint calls you get a failure. This code example might help you https://developer.cisco.com/codeexchange/github/repo/bigevilbeard/Getting_Started_SDWAN or you can see examples in the https://developer.cisco.com/docs/sdwan/#!authentication this document shows the example for vManage post-19.2 - Session Cooke (jsessionid) and Token.
Hope this helps!
11-11-2021 10:38 AM
Your code does not save or re use the cookies or token.
11-11-2021 06:37 PM
Your code does not save or re use the cookies or token.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide