Вызов стека облаков с параметрами

Я пытаюсь сделать вызов API, используя приведенный ниже код, и он работает нормально

import urllib2
import urllib
import hashlib
import hmac
import base64


baseurl='http://www.xxxx.com:8080/client/api?'
request={}
request['command']='listUsers'
request['response']='xml'
request['apikey']='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
secretkey='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
request_str='&'.join(['='.join([k,urllib.quote_plus(request[k])]) for k in request.keys()])
sig_str='&'.join(['='.join([k.lower(),urllib.quote_plus(request[k].lower().replace('+','%20'))])for k in sorted(request.iterkeys())])
sig=hmac.new(secretkey,sig_str,hashlib.sha1)
sig=hmac.new(secretkey,sig_str,hashlib.sha1).digest()
sig=base64.encodestring(hmac.new(secretkey,sig_str,hashlib.sha1).digest())
sig=base64.encodestring(hmac.new(secretkey,sig_str,hashlib.sha1).digest()).strip()
sig=urllib.quote_plus(base64.encodestring(hmac.new(secretkey,sig_str,hashlib.sha1).digest()).strip())
req=baseurl+request_str+'&signature='+sig
res=urllib2.urlopen(req)
result = res.read()
print result

Что я хочу знать, как я могу отправить дополнительный параметр с вызовом Api? и как отправлять параметры при отправке данных в облачный стек вместо получения из облачного стека, например, createuser

1 ответ

Решение

Добавьте дополнительные параметры к request толковый словарь.

Например, listUsers позволяет отображать сведения о конкретном имени пользователя ( Справочник по API listUsers). Для этого вам нужно обновить request создание следующим образом:

request={}
request['command']='listUsers'
request['username']='admin'
request['response']='xml'
request['apikey']='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

Кроме того, в Правилах подписи говорится "Строчная вся командная строка и сортировать ее по алфавиту через поле для каждой пары поле-значение". В этом разделе документов также рассматривается добавление срока действия к URL-адресу.

Наконец, вам нужно убедиться, что HTTP GET не кэшируется сетевой инфраструктурой, сделав каждый HTTP GET уникальным. CloudStack API использует кеш-буфер. Кроме того, вы можете добавить срок действия к каждому запросу или использовать HTTP POST.

Другие вопросы по тегам