调用第三方API(RESTful规范)的API-百度云修改实例属性

实现效果

我们可以对云产品进行API调用完成一些操作,比如使用API修改实例的属性
将实例名字修改为五个AAAAA

使用Postman测试发送

我们以修改百度云实例属性为例,完成接口的调用

请求结构

PUT /v{version}/instance/{instanceId}?{action} HTTP/1.1
Host: bcc.bj.baidubce.com
Authorization: authorization string

{
    "name": InstanceName
}

Postman配置鉴权

下载百度云提供的Postman脚本的方式,

postman脚本直接生成

复制粘贴脚本

对于单个需要添加签名的请求,可以将下载的脚本( add_authorization.js )复制粘贴到postman

中的 Pre-request Script 栏下。

配置环境变量

导入样本环境

在提供的脚本中提供了sample.json

后续操作

在环境配置完成后,若想观察环境变量,可点击postman右上⻆的眼睛图标。

将我们百度云控制台的AK/SK调成我们自己的即可

发送请求

在postman工具请求方式put,填上url链接:http://bcc.bj.baidubce.com/v2/instance/i-CDKaGzq1?modifyAttribute

并提供headers 和 body体,发送请求即可完成更改属性

host	bcc.bj.baidubce.com 


{
	"name":"BBBBB"
}	

使用Python代码完成实例的修改

生成百度云鉴权认证字符串

  • 获取AK/SK
  • 拼接得到认证字符串前缀部分
  • 将请求方式、请求参数、携带参数、请求头部处理
  • 用SHA256算法生成SigningKey
  • 用SHA256算法将SigningKey生成Signature
  • 将认证字符串前缀部分、等等拼接得到最终的Authorization

代码

import hashlib
import hmac
import urllib
import time

AK = "910439e22983468da419205a94abb4a5"
SK = "1442c7d3840d465aac8787eba63491bb"

# http://bcc.bj.baidubce.com/v2/instance/i-CDKaGzq1?modifyAttribute
host = "bcc.bj.baidubce.com"
method = "PUT"

query = "modifyAttribute"
URL = "/v2/instance/i-CDKaGzq1"

x_bce_date = time.gmtime()
x_bce_date = time.strftime("%Y-%m-%dT%H:%M:%SZ",x_bce_date)

header = {
    "content-type":"application/json;charset=utf-8",
    "Host":host,
    "x_bce_date":x_bce_date
}
# 百度云鉴权认证生成
signedHeaders = "content-type;host;x_bce_date"
authStringPrefix = "bce-auth-v1" + "/" + AK + "/" + x_bce_date + "/" + "1800"
CanonicalURL = urllib.parse.quote(URL)
CanonicalQuerySting = query + "="
result = []
for key,value in header.items():
    tempStr = str(urllib.parse.quote(key.lower(),safe="")) + ":" + str(urllib.parse.quote(value,safe=""))
    result.append(tempStr)
result.sort()
CanonicalHeaders = "\n".join(result)
CanonicalRequest = method + "\n" + CanonicalURL + "\n" + CanonicalQuerySting + "\n" + CanonicalHeaders
singingKey = hmac.new(SK.encode("utf-8"),authStringPrefix.encode("utf-8"),hashlib.sha256)
Signature = hmac.new((singingKey.hexdigest()).encode("utf-8"),CanonicalRequest.encode("utf-8"),hashlib.sha256)
header["Authorization"] = authStringPrefix + "/" + signedHeaders + "/" + Signature.hexdigest()


import requests,json

body = {
    "name":"AAAAA"
}

url = "http://" + host + URL + "?" + query

r = requests.put(url,headers=header,data=json.dumps(body))
print(r.text)
posted @ 2019-12-29 20:06  GeminiMp  阅读(569)  评论(0编辑  收藏  举报