首页 > 编程语言 >【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

【Azure Developer】如何通过Azure Portal快速获取到对应操作的API并转换为Python代码

时间:2024-05-15 20:43:10浏览次数:22  
标签:tags Python test API chinacloudapi https Azure

问题描述

对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢?

 

问题解答

当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中抓取到的请求Body/Header来实现转换为Python代码。

第一步:打开浏览器开发者模式(F12),  查看操作所发送的API请求

比如在操作对Resource group 进行Tags修改的时候,抓取到发送的请求为:https://management.chinacloudapi.cn/batch?api-version=2020-06-01, 所以把它的URL, Authorization,Payload内容都复制到文本编辑器中。 

第二步:复制请求的Body/Header,特别是Authorization

从第一步发出的请求中复制的内容示例:

Host URL: https://management.chinacloudapi.cn/batch?api-version=2020-06-01
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6InpfMk...........
Payload:
{"requests":[{"content":{"operation":"Replace","properties":{"tags":{"test":"test","test1":"test2"}}},
"httpMethod":"PATCH","name":"xxxx-xx8","requestHeaderDetails":{"commandName":"HubsExtension.ArmTags.patchResourceTags"},
"url":"/subscriptions/xxxxxxxxxxxxx/resourceGroups/adls-rg/providers/Microsoft.Resources/tags/default?api-version=2019-10-01"}]}

复制好请求的Body,Header等信息后,组合成可以正确使用的URL, Authorization,Request Body。

  • URL 为 host + payload中的url ,拼接后的正确值是 :https://management.chinacloudapi.cn/subscriptions/xxxxx-xxxx-xxxx-xxxx-xxxxx/resourceGroups/<resource group name>/providers/Microsoft.Resources/tags/default?api-version=2019-10-01
  • Body 内容为Payload中的content信息,所以是:{"operation":"Replace","properties":{"tags":{"test":"test","test1":"test2"}}}

 

第三步:在Postman等发送API的工具中测试请求是否成功,本处使用 VS Code 插件 Thunder Client

把第二步中的内容,填入到发送REST API的工具中验证,结果显示 200,修改成功。

 

第四步:转换为Python代码,并测试运行是否成功

在Thunder Client的Response窗口点击“{ }” 按钮,并选择Python 语言,复制示例代码。

 Python示例代码(替换为正确的Access Token 和 SubscriptionID , Resource Group名称后,代码正常运行):

import http.client
import json

conn = http.client.HTTPSConnection("management.chinacloudapi.cn")

headersList = {
 "Accept": "*/*",
 "User-Agent": "Thunder Client (https://www.thunderclient.com)",
 "Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJ.......",
 "Content-Type": "application/json" 
}

payload = json.dumps({
  "operation": "Replace",
  "properties": {
    "tags": {
      "test": "test",
      "test1": "test2"
    }
  }
})

conn.request("PATCH", "/subscriptions/xxxxxxxxx/resourceGroups/xxxx/providers/Microsoft.Resources/tags/default?api-version=2019-10-01", payload, headersList)
response = conn.getresponse()
result = response.read()

print(result.decode("utf-8"))

 

 

第五步:用Python Code替换 hardcode Authorization

使用azure.identity来完成认证和显示获取AccessToken

from azure.identity import DefaultAzureCredential 

##get access token
credential = DefaultAzureCredential()
accessToken = credential.get_token("https://management.chinacloudapi.cn/.default")
print(accessToken.token)

在结合第四步的Python代码后,就可以实现实时获取Access Token,并Python代码发送REST API.

完整示例代码:

import http.client
import json
from azure.identity import DefaultAzureCredential 

##get access token
credential = DefaultAzureCredential()

accessToken = credential.get_token("https://management.chinacloudapi.cn/.default")

#print(accessToken.token)

## Send API
conn = http.client.HTTPSConnection("management.chinacloudapi.cn")

headersList = {
 "Accept": "*/*",
 "User-Agent": "Thunder Client (https://www.thunderclient.com)",
 "Authorization": "Bearer " +accessToken.token,
 "Content-Type": "application/json" 
}

payload = json.dumps({
  "operation": "Replace",
  "properties": {
    "tags": {
      "test": "test",
      "test1": "test2"
    }
  }
})

conn.request("PATCH", "/subscriptions/xxxxxxxxxxxxxx/resourceGroups/xxxxxxxx/providers/Microsoft.Resources/tags/default?api-version=2019-10-01", payload, headersList)
response = conn.getresponse()
result = response.read()

print(result.decode("utf-8"))

 

参考资料

Thunder Client for VS Code : https://www.thunderclient.com/

 

 

标签:tags,Python,test,API,chinacloudapi,https,Azure
From: https://www.cnblogs.com/lulight/p/18194657

相关文章

  • python操作redis
    redis安装:https://github.com/tporadowski/redis/releases/一python操作redis1普通链接pipinstallredisimportredisconn=redis.Redis(host="localhost",port=6379,db=0,password=None)conn.set('name','lqz')con......
  • [HDCTF 2023]YamiYami python中的另一种反序列化--yaml
    今天做了到新颖的题,关于python中的yaml反序列化的题目,直接上题吧。发现第一个链接的参数是?url=XXXX,一眼利用点。嗯?直接出了flag,应该是非预期解。再看看有app.py,那就试试。发现app.*被过滤了,二次编码绕过试试。点击查看代码@app.route('/')defindex():session['pas......
  • Python: SunMoonTimeCalculator
     #encoding:utf-8#版权所有2024©涂聚文有限公司#许可信息查看:#描述:https://github.com/Broham/suncalcPy#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python3.11#Datetime:2024/5/1421:59#User:geovindu#Product......
  • 流畅的python--第四章
    Unicode文本和字节序列字符串是较简单的概念,一个字符串就是一个字符序列。问题在于“字符”是如何定义的。在2021年,“字符”的最佳定义是Unicode字符。因此从Python3的str对象中获取的项是Unicode字符。Unicode标准明确区分字符的标识和具体的字节表述。字符的标识,即码点,是0~1......
  • 接口自动化框架【python+requests+pytest+allure】需要安装的依赖包
    attrs23.2.0certifi2024.2.2cffi1.16.0charset-normalizer3.3.2colorama0.4.6cryptography42.0.5h110.14.0idna3.6iniconfig2.0.0outcome1.3.0.post0packaging24.0pluggy1.4.0pycparser2.21pyOpenSSL24.1.0PySocks1.7.1pytest8.1.1selenium4.2.0sniffio1.3.1......
  • 02快速上手drf、CBV源码分析、APIVIEW源码分析
    快速上手drf、CBV源码分析、APiview源码分析一、快速上手drf【1】安装drfpipinstalldjangorestframework注意:安装时不指定版本,默认下载最新版本每个版本有对应的解释器版本和django限制要求,下载时官网查看一下如果django版本是3以下,drf最新跟django3以下版本不兼容版......
  • python sftp文件上传和Dockerfile部署步骤
    ##1、脚本app.py#-*-coding:utf8-*-importosimportparamikofromdatetimeimportdatetime,timedeltafromflaskimportFlask,requestapp=Flask(__name__)#从环境变量中获取配置信息host=os.getenv("SFTP_HOST")port=int(os.getenv("SFTP_PORT&q......
  • 【python】*args, **kwargs
    【日期】2024/5/15【作用】以允许函数接收任意数量和类型的非关键字参数(*args)和关键字参数(**kwargs)。*args:允许你将一个不定数量的非关键字参数传递给一个函数。这些参数在函数内部被当作一个元组(tuple)处理。**kwargs:允许你将一个不定数量的关键字参数传递给一个函数。这些参......
  • Python基础篇(流程控制)
    流程控制是程序运行的基础,流程控制决定了程序按照什么样的方式执行。条件语句条件语句一般用来判断给定的条件是否成立,根据结果来执行不同的代码,也就是说,有了条件语句,才可以根据不同的情况做不同的事,从而控制程序的流程。ifelseif条件成立,执行if内的命令;否则条件不成立,则......
  • Laravel Resource Routes和API Resource Routes讲解
    在Laravel中,ResourceRoutes和APIResourceRoutes是两种用于定义RESTful路由的便捷方法。它们帮助开发者快速创建遵循RESTful标准的路由集合,分别适用于普通Web应用和API应用。ResourceRoutesResourceRoutes是为传统的Web应用设计的,它们生成了一组常见的CRUD......