[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}}