[DOWNLOAD AS A FILE|^cs_api_request_client.py]
{{\#\!/ usr/bin/env python}}
{{\# By: Kelcey Damage, 2012}}
{{import hashlib, hmac, string. base64, urllib}}
{{\# Reference GET/POST sample request}}
{{\#}}
{{\# 1.}} {{_[http://10.10.0.1:8080/client/api]_}}
{{\# 2. ?apiKey=}}{{{}{_}API_KEY{_}}}
{{\# 3. &command=}}{{{}{_}API_COMMAND{_}}}
{{\# 4. &response=}}{{{}{_}JSON/XML{_}}}
{{\# 5. &zoneid=}}{{{}{_}ZONE_ID{_}}}
{{\# 6. &signature=}}{{{}{_}SIGNATURE{_}}}
{{\# Reference required signature elements}}
{{\#}}
{{\# 1. request}}
{{\# 2. apiKey}}
{{\# 3. private_key}}
{{api_url =}} *_'http://10.10.0.1:8080/client/api'_*
{{secret =}} {{{*}{_}Secret Key{_}{*}}}
{{apiKey =}} {{{*}{_}API Key{_}{*}}}
{{request =}} *{_}{ 'command': 'restartNetwork', 'id': '214', 'response': 'json'}{_}*
{{class SignedAPICall(Object):}}
{{ def}} {{init{_}{}}}{{\_(self, api_url, apikey,, secret):}}
{{ self.api_url = api_url}}
{{ self.apikey = apiKey}}
{{ self.secret = secret}}
{{ def request(self, args):}}
{{ args\['apiKey'\] = self.apiKey}}
{{ self.params = \[\]}}
{{ self._sort_request(args)}}
{{ self._creat_signature()}}
{{ self._build_post_request()}}
{{ def \_sort_request(self, args):}}
{{ keys = sorted(args.keys())}}
{{ for key in keys:}}
{{ self.params.append(key + '=' + urllib.quote_plus(args\[key\]))}}
{{ def \_create_signature(self):}}
{{ self.query = '&'.join(self.params)}}
{{ digest = hmac.new(}}
{{ self.secret,}}
{{ msg=self.query.lower(),}}
{{ digestmod=hashlib.sha1).digest()}}
{{ self.signature = base64.b64encode(digest)}}
{{ def \_build_post_request(self):}}
{{ self.query \+= '&signature=' + urllib.quote_plus(self.signature)}}
{{ self.value = self.api_url + '?' + self.query}}
{{api = SignedAPICall(api_url, apiKey,, secret)}}
{{api.request(request)}}
{{print api.value}} |