Python:Google Cloud Identity API > 设备 > 列表

Python: Google Cloud Identity API > Devices > List

使用 Google Cloud Identity API > 设备 > 带有过滤器的列表请求以包含按序列号查询的方式,对于序列号不包含空格的记录,即 5HCS8767,但会 return 如果序列号包含空格,例如 VMWare VM 中的空格,即 WMWARE-34 98 83 DE 38... 等

该请求是一个 http get 请求,如下所示:

device_query = f'{device_endpoint_url}?filter=serial:{serial_number}&view=COMPANY_INVENTORY'

res = requests.get(device_query, headers=headers).json()

成功的响应如下所示:

{'devices': [{'name': 'devices/jsihshd98ashd98ahsd', 'createTime': '1000-01-01T01:01:01.011Z', 'lastSyncTime': '1970-01-01T00:00:00Z', 'ownerType': 'COMPANY', 'deviceType': 'CHROME_OS', 'serialNumber': '<SERIAL NUMBER>', 'assetTag': '<ASSET TAG>'}], 'nextPageToken': '<NEXT PAGE TOKEN>'}

查询带空格序列号的响应,return为空

我已尝试对序列号进行 urlencoding,结果相同。

有没有人遇到过类似的情况?

谢谢,

在查询不带空格的序列号时,调用的工作方式如文档中所述:

GET 请求看起来像这样并且编码为:

https://cloudidentity.googleapis.com/v1/devices?serial:CSD9S7E7W&view=COMPANY_INVENTORY

查询带空格的序列号时:(EMPTY RESPONSE)

GET 请求看起来像这样并被编码:

https://cloudidentity.googleapis.com/v1/devices?filter=serial:VMWARE-56 4D F9 5D 52 07 0F CF-E1 0C ED E4 DD 40 2A B2&view=COMPANY_INVENTORY
https://cloudidentity.googleapis.com/v1/devices?filter=serial:VMWARE-56%204D%20F9%205D%2052%2007%200F%20CF-E1%200C%20ED%20E4%20DD%2040%202A%20B2&view=COMPANY_INVENTORY

查询带空格的序列号时:(预期响应 - 工作)

在序列号 %22 前后添加和编码引号

GET 请求看起来像这样并被编码:

https://cloudidentity.googleapis.com/v1/devices?filter=serial:"VMWARE-23 4H C9 4D"&view=COMPANY_INVENTORY

https://cloudidentity.googleapis.com/v1/devices?filter=serial:%22VMWARE-23%204H%20C9%204D%22&view=COMPANY_INVENTORY

在序列号前后使用引号适用于带空格和不带空格的序列号,所以最好只使用它们。

使用 python 库 urllib:

import urllib.parse
serial_number = urllib.parse.quote(f'"{serialNumber}"')

"VMWARE-23 4H C9 4D" >>> %22VMWARE-23%204H%20C9%204D%22

res = requests.get(f'https://cloudidentity.googleapis.com/v1/devices?filter=serial:{serial_number}&view=COMPANY_INVENTORY', headers=headers)