Python 使用Azure资源管理器REST API

Python 使用Azure资源管理器REST API,python,python-2.7,rest,azure,azure-resource-manager,Python,Python 2.7,Rest,Azure,Azure Resource Manager,我正在尝试使用Azure ARM REST API。考虑创建资源组的示例,这是azure文档中提到的API https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group-name}?api-version={api-version} 我的代码: import httplib, urllib, base64 headers = { # Request headers

我正在尝试使用Azure ARM REST API。考虑创建资源组的示例,这是azure文档中提到的API

https://management.azure.com/subscriptions/{subscription-id}/resourcegroups/{resource-group-name}?api-version={api-version}
我的代码:

import httplib, urllib, base64

headers = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': 'xxxxxx',
    'Authorization': 'xxxxx',
    'Identifier' : 'xxxxx'
}

params = urllib.urlencode({
"location":"Central US"
})

try:
    conn = httplib.HTTPSConnection('xxxx.azure-api.net')
    conn.request("PUT", "/resourcegroups/resourcename?api-version=2015-01-01%s" % params, "{body}", headers)
    response = conn.getresponse()
    data = response.read()
    print(response.status)
    conn.close()
except Exception as e:
    print("[Errno {0}] {1}".format(e.errno, e.strerror))

我得到一个404错误。你能帮我找出哪里出了问题吗。谢谢。

根据我的理解,我认为您的代码中有一些错误,如下所示

  • 根据,RESTAPI url应该被分成
    主机
    路径
    查询字符串
    (或
    参数
    ),作为函数
    httplib.HTTPSConnection
    conn.request
    的参数,正如@dev的评论所说。因此,响应状态为404未找到
  • 函数
    conn.request
    的HTTP请求对于restapi的&as
    headers
    也丢失,而
    Authorization
    header内容可以从中获取

  • 希望能有帮助。致以最诚挚的问候。

    我认为最好使用msrest库而不是普通的http,因为它将为您完成大部分工作。例如,它将获得适当的访问令牌。 它还可以正确处理轮询

    这里有一些自动生成的Python REST示例:


    难道您没有忘记文档行中URI中的/subscriptions/{subscription id}部分吗?@miracledev,据我所知,
    Ocp Apim subscription Key
    参数就是这样的is@MichaelB您确定这适用于资源管理器REST API吗?这不是API管理功能吗?@miracledev我从端点
    azure API.net
    (可能错过了问题标题!)做出了假设,所以是的,您可能是对的,OP需要额外的URI参数。我对APIM参数的来源感到困惑。如果您只是调用ARM API,那么您应该使用作为基址,而不是xxxx.azure-API.net,并且您需要按照@miracledev所说的那样包含订阅。您好,正如您所提到的,我已经更改了我的头和conn.request。现在,我的头包括内容类型、客户端id、租户id和身份验证密钥。控制室的要求是这样的。conn=httplib.HTTPSConnection('management.azure.com')conn.request(“GET”,“/subscriptions/xxxx/resourcegroups/rapidresource?api version=2015-01-01%s”%params,{body}”,headers)。但现在它是一个错误。是否有任何其他参数应该包含在我的标题部分?@shwetha标题应该包含您可以在REST API文档中找到的必需元素。
    client\u id
    tenant\u id
    authentication\u key
    用于请求头
    Authorization
    中使用的访问令牌,请关注文档。好的,我安装了
    pip adal
    ,并传递了这些参数以获取访问令牌。然后我在标题部分使用了它。但它仍然会给我一个401错误。@shwetha用于在Azure SDK For Python中验证ARM,请参阅。如果您想使用SDK创建资源组,您可以看到。@shwetha您可以尝试使用工具
    Postman
    来请求这些REST API,并使用包含401错误原因的响应信息进行调试。