def call_url(verb, data, baseUrl, testUrl, keyId, keySecret, serverProxyHost, serverProxyPort, serverProxyUsername, serverProxyPassword): r"""A convenience definition to call a URL with the necessary headers and payload. No need to worry about how to POST multipart/form-data or how to handle certain error exceptions. The return value is either the respopnse body or error reason code. """ params = { 'url': baseUrl, 'username': keyId, 'password': keySecret, 'proxyHost': serverProxyHost, 'proxyPort': serverProxyPort, 'proxyUsername': serverProxyUsername, 'proxyPassword': serverProxyPassword } try: if verb == 'post': response = HttpRequest(params).post(testUrl, json.dumps(data), contentType='application/json') elif verb == 'put': response = HttpRequest(params).put(testUrl, json.dumps(data), contentType='application/json') elif verb == 'patch': response = HttpRequest(params).patch( testUrl, json.dumps(data), contentType='application/json') elif verb == 'delete': response = HttpRequest(params).delete( testUrl, json.dumps(data), contentType='application/json') elif verb == 'get': response = HttpRequest(params).get(testUrl, contentType='application/json') else: logger.error( "FATAL: HTTP verb error! Only POST, PUT, PATCH, DELETE and GET verbs supported." ) sys.exit(201) output = json.loads(response.getResponse()) # Catch all exceptions except Exception as error: logger.error("FATAL: Error! %s" % error) raise Exception("Failed to connect to Blazemeter Server.") sys.exit(205) return output