使用Python脚本生成一个可以调用的API URL
更新时间:
概述
某些API接口需要通过字符转换、参数拼接和签名等操作实现接口调用,如果您需要通过CURL或者浏览器直接进行API接口调用,可参见本方案生成API URL地址。本文主要介绍如何生成一个直接可以通过CURL和浏览器访问的API接口地址。
详细信息
说明:使用脚本前,建议先阅读相关文档,了解产品的公共参数、API接口参数、加密过程。根据文档说明,对参考脚本中的
access_key_id
、access_key_secret
、服务地址server_address
、API接口参数user_params
、公共参数parameters
进行调整,然后在Python环境下执行即可获取到对应的请求链接。
本文以ECS DescribeInstances接口为例,使用Python脚本生成一个可以直接调用的API URL,脚本内容如下,以下脚本在Python 2.6.0环境中验证可用,需要在相应的操作系统中安装Python 2.X.X的执行环境,然后把代码复制到IDE(类似于Pycharm)或者文本编辑器(类似于Sublime Text)中执行。
#!/usr/bin/env python
#coding: utf-8
import sys,os
import urllib,urllib2
import base64
import hmac
import hashlib
from hashlib import sha1
import time
import uuid
import json
access_key_id = 'LTAI*******yxefv'
access_key_secret = 'nohb*************PEdln'
server_address = 'https://ecs.aliyuncs.com'
user_params = {'Action': 'DescribeInstances', 'RegionId': 'cn-hangzhou', 'VpcId': 'vpc-bp******wtww','VSwitchId':'vsw-bp******tjo0'}
def percent_encode(encodeStr):
encodeStr = str(encodeStr)
res = urllib.quote(encodeStr.decode('utf8').encode('utf8'), '')
res = res.replace('+', '%20')
res = res.replace('*', '%2A')
res = res.replace('%7E', '~')
return res
def compute_signature(parameters, access_key_secret):
sortedParameters = sorted(parameters.items(), key=lambda parameters: parameters[0])
canonicalizedQueryString = ''
for (k,v) in sortedParameters:
canonicalizedQueryString += '&' + percent_encode(k) + '=' + percent_encode(v)
stringToSign = 'GET&%2F&' + percent_encode(canonicalizedQueryString[1:])
print "stringToSign:"+stringToSign
h = hmac.new(access_key_secret + "&", stringToSign, sha1)
signature = base64.encodestring(h.digest()).strip()
return signature
def compose_url(user_params):
timestamp = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(time.time()))
parameters = {
'Format' : 'JSON',
'Version': '2014-05-26',
'AccessKeyId' : access_key_id,
'SignatureVersion': '1.0',
'SignatureMethod' : 'HMAC-SHA1',
'SignatureNonce': str(uuid.uuid1()),
'Timestamp' : timestamp
}
for key in user_params.keys():
parameters[key] = user_params[key]
signature = compute_signature(parameters, access_key_secret)
parameters['Signature'] = signature
url = server_address + "/?" + urllib.urlencode(parameters)
return url
def make_request(user_params, quiet=False):
url = compose_url(user_params)
print url
make_request(user_params)
脚本执行结果类似如下。
相关文档
适用于
- 云服务器 ECS
文档内容是否对您有帮助?