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

azure,developer,portal,api,python · 浏览次数 : 0

小编点评

## Python 代码实现 ```python import http.client import azure.identity # 1. 获取 Access Token credential = azure.identity.DefaultAzureCredential() accessToken = credential.get_token("https://management.chinacloudapi.cn/.default") # 2. 构造 API 请求 url = "https://management.chinacloudapi.cn/subscriptions/xxxxxxxxx/resourceGroups/xxxx/providers/Microsoft.Resources/tags/default?api-version=2019-10-01" headers = {"Authorization": f"Bearer {accessToken}", "Content-Type": "application/json"} payload = json.dumps({"operation": "Replace", "properties": {"tags": {"test": "test", "test1": "test2"}}}) # 3. 发送 API 请求 response = http.client.patch(url, headers=headers, data=payload) # 4. 打印响应结果 print(response.json()) ``` **注意:** * 代码需要安装相关库,例如 `azure-identity` 和 `http.client`。 * 代码需要替换 `xxxxxxx` 和 `xxxxxxxx` 为您的实际值。 * 代码假设您已配置了 Azure 帐户并获取了相应的 Access Token。

正文

问题描述

对于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/

 

 

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

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

问题描述 对于Azure资源进行配置操作,门户上可以正常操作。但是想通过Python代码实现,这样可以批量处理。那么在没有SDK的情况下,是否有快速办法呢? 问题解答 当然可以,Azure Portal上操作的所有资源都是通过REST API来实现的,所以只要找到正确的API,就可以通过浏览器中抓取

【Azure Developer】使用 Microsoft Graph API查看用户状态和登录记录

问题描述 通过Microsoft Graph的API如何来查看用户信息和登录记录呢? 问题解答 第一步:需要一个授权Token 比如一个拥有查看用户权限的Azure账号,通过Azure CLI 命令获取到一个Access Token az cloud set --name AzureChinaClo

【Azure Developer】在Github Action中使用Azure/functions-container-action@v1配置Function App并成功部署Function Image

问题描述 使用Github Action,通过 Azure/functions-container-action@v1 插件来完成 yaml 文件的配置,并成功部署Function Image 的过程记录。 操作步骤 第一步: 准备Function的镜像文件 如在VS Code中,通过Termina

【Azure Developer】示例: 在中国区调用MSGraph SDK通过User principal name获取到User信息,如Object ID

问题描述 示例调用MSGraph SDK通过User principal name获取到User信息,如Object ID。 参考资料 选择 Microsoft Graph 身份验证提供程序 : https://learn.microsoft.com/zh-cn/graph/sdks/choose-

【Azure Developer】Go语言调用Azure SDK如何登录到中国区Azure环境

问题描述 在 “使用 Azure SDK for Go 进行 Azure 身份验证” 文章中的 Go 示例代码进行登录Azure时,默认指向的是Globa Azure。当只修改AAD AZURE_CLIENT_ID , AZURE_TENANT_ID 和 AZURE_CLIENT_SECRET参数值

【Azure Developer】使用 Microsoft Graph API 获取 AAD User 操作示例

问题描述 查看官方文档“ Get a user ” , 产生了一个操作示例的想法,在中国区Azure环境中,演示如何获取AAD User信息。 问题解答 使用Microsoft Graph API,演示如何获取AAD User信息,因参考文档是针对Global Azure,所以文档种的URL为: /

【Azure Developer】一个复制Redis Key到另一个Redis服务的工具(redis_copy_net8)

介绍一个简单的工具,用于将Redis数据从一个redis端点复制到另一个redis端点,基于原始存储库转换为.NET 8:https://github.com/LuBu0505/redis-copy-net8

【Azure Developer】.Net 简单示例 "文字动图显示" Typing to SVG

问题描述 看见一个有趣的页面,可以把输入的文字信息,直接输出SVG图片,还可以实现动图模式。 示例URL: https://readme-typing-svg.demolab.com/?font=Fira+Code&pause=1000&color=F7F7F7&background=233911F

【Azure Developer】use @azure/arm-monitor sdk 遇见 ManagedIdentityCredential authentication failed.(status code 500)

@azure/arm-monitor ManagedIdentityCredential authentication failed.(status code 500) CredentialUnavailableError: ERROR: AADSTS500011: The resource principal name https://management.azure.com was not

【Azure Developer】在App Service上放置一个JS页面并引用msal.min.js成功获取AAD用户名示例

问题描述 在App Service上放置一个JS页面并引用msal.min.js,目的是获取AAD用户名并展示。 问题解答 示例代码 Azure Service