import requests import base64 def GenerateZertoRestSession_VcenterAuthentication(zvmIp, user, password):   credStr = user + ":" + password   encodedCredStr = "Basic " + base64.b64encode(credStr)   print encodedCredStr   payload = {"AuthenticationMethod": 1}   dataval = json.dumps(payload)   print (dataval)   headers = {'Authorization': encodedCredStr, 'content-type': 'application/json'}   url = "https://" + zvmIp + ":9669/v1/session/add"   r = requests.post(url, data=dataval, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):   raise Exception("Failed authenticating to ZVM")   res = r.headers.get('x-zerto-session')   print "session = " + res   return res  | 
import requests import base64 def GenerateZertoRestSession_WindowsAuthentication(zvmIp, user, password):   credStr = user + ":" + password   encodedCredStr = "Basic " + base64.b64encode(credStr)   print encodedCredStr   headers = {'Authorization': encodedCredStr}   url = "https://" + zvmIp + ":9669/v1/session/add"   r = requests.post(url, headers=headers, verify=False)   print r.status_code   if(r.status_code != requests.codes.ok):     raise Exception("Failed authenticating to ZVM")   res = r.headers.get('x-zerto-session')   print "session = " + res   return res  | 
import requests def EndZertoRestSession(zvmIp, sessionId):   url = "https://" + zvmIp + ":9669/v1/session"   headers = {'x-zerto-session': sessionId, 'content-type': 'application/json'}   r = requests.delete(url, headers=headers, verify=False)   print r.status_codes  | 
$strZVMIP = "{ZVM IP}" $strZVMPort = "{ZVM HTTPS port}" $strZVMUser = "{ZVM user}" $strZVMPwd = "{ZVM user password}" ## Perform authentication so that Zerto APIs can run. Return a session identifier that needs to be inserted in the header for subsequent requests. function getxZertoSession ($userName, $password){   $baseURL = "https://" + $strZVMIP + ":"+$strZVMPort   $xZertoSessionURI = $baseURL +"/v1/session/add"   $authInfo = ("{0}:{1}" -f $userName,$password)   $authInfo = [System.Text.Encoding]::UTF8.GetBytes($authInfo)   $authInfo = [System.Convert]::ToBase64String($authInfo)   $headers = @{Authorization=("Basic {0}" -f $authInfo)}   $body = '{"AuthenticationMethod": "1"}'   $contentType = "application/json"   $xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURI -Headers $headers -Method POST -Body $body -ContentType $contentType     #$xZertoSessionResponse = Invoke-WebRequest -Uri $xZertoSessionURI -Headers $headers -Body $body -Method POST     return $xZertoSessionResponse.headers.get_item("x-zerto-session") } #Extract x-zerto-session from the response, and add it to the actual API: $xZertoSession = getxZertoSession $strZVMUser $strZVMPwd $zertoSessionHeader = @{"x-zerto-session"=$xZertoSession}  | 
$body = '{"AuthenticationMethod": "1"}'  | 
$body = '{"AuthenticationMethod": "0"}'  | 
... string zvmip = args[0]; string zvmport = args[1]; string username = args[2]; string password = args[3]; string loginType = args.Length > 4 ? args[4] : "1"; string baseAddress = "https://" + zvmip + ":" + zvmport + "/v1/" string addSessionUri = baseAddress + "/session/add"; HttpWebRequest request = WebRequest.Create(addSessionUri) as HttpWebRequest; //logging-in is about ADDING a session with the POST http command request.Method = "POST"; request.Timeout = 10000; request.ContentLength = 0; string prepareUserNamePassword = string.Format("{0}:{1}", username, password); byte[] credentialsBytes = Encoding.ASCII.GetBytes(prepareUserNamePassword); string encodedBasicAuthentication = Convert.ToBase64String(credentialsBytes); string encodedCredentialsInBasicAuthenticationFormat = "Basic " + encodedBasicAuthentication; byte[] byte1 = new ASCIIEncoding().GetBytes("{\"AuthenticationMethod\":"+ loginType + "}"); request.ContentLength = byte1.Length; Stream newStream = request.GetRequestStream(); newStream.Write(byte1, 0, byte1.Length); HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse; if (httpResponse.StatusCode == HttpStatusCode.OK) {   //After a successful login your session-id is returned in the 'x-zerto-session' header   m_sessionId = httpResponse.Headers.Get(c_authorizationHeader); } else {   Console.WriteLine("request {0} failed with code: {1}, {2}", request, httpResponse.StatusCode, httpResponse.StatusDescription); } ...  | 
string loginType = args.Length > 4 ? args[4] : "1";  | 
string loginType = args.Length > 4 ? args[4] : "0";  | 
private void LogOut() {   string addSessionUri = m_baseAddress + "/session";   HttpWebRequest request = WebRequest.Create(addSessionUri) as HttpWebRequest;   //logging-out is about DELETING a session, with the DELETE http command   request.Method = "DELETE";   request.Timeout = 10000;   //you need to set the id of the session to be deleted --> logged-out   request.Headers.Add(c_authorizationHeader, m_sessionId);   HttpWebResponse httpResponse = request.GetResponse() as HttpWebResponse;   if (httpResponse.StatusCode == HttpStatusCode.OK) {     m_sessionId = string.Empty;     Console.WriteLine("\nLogged out - by deleting the session");   }   else {     Console.WriteLine("Request {0} failed with code: {1}, {2}", request, httpResponse.StatusCode, httpResponse.StatusDescription);   } }  |