使用Cylance Optics API执行设备锁定时遇400错误:lockdown_type必填
Cylance Optics API 隔离设备接口400错误解决:缺失lockdown_type参数
调用Cylance Optics API的隔离设备功能时,返回400状态码,错误响应内容:
b'{"status": "CLIENT_ERROR", "message": "'lockdown_type' is a required property"}'
我在Demisto平台开发,官方API文档未提及lockdown_type参数的传入方式,当前请求代码如下:
def lockdown_device_request(device_id, value, expires): # Create request access_token = get_authentication_token([SCOPE_OPTICS_LOCKDOWN]) headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + access_token } uri = f'{URI_DEVICECOMMAND}/{device_id}/lockdown?value={value}&expires={expires}' res = api_call(uri=uri, method='put', headers=headers) return res
解决方法
lockdown_type是必填的请求体参数,而非URL参数。由于接口指定了Content-Type: application/json,需要将该参数放在JSON请求体中传递,而非拼接在URL上。
常见的lockdown_type取值为full(完全隔离)或selective(选择性隔离),可根据业务需求选择。调整后的代码示例:
def lockdown_device_request(device_id, value, expires, lockdown_type="full"): # Create request access_token = get_authentication_token([SCOPE_OPTICS_LOCKDOWN]) headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + access_token } # 构造JSON请求体 payload = { "lockdown_type": lockdown_type, "value": value, "expires": expires } uri = f'{URI_DEVICECOMMAND}/{device_id}/lockdown' # 若api_call支持直接传入json参数,使用如下方式 res = api_call(uri=uri, method='put', headers=headers, json=payload) return res
如果api_call函数不支持json参数,需要手动序列化JSON:
import json def lockdown_device_request(device_id, value, expires, lockdown_type="full"): # Create request access_token = get_authentication_token([SCOPE_OPTICS_LOCKDOWN]) headers = { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + access_token } payload = { "lockdown_type": lockdown_type, "value": value, "expires": expires } uri = f'{URI_DEVICECOMMAND}/{device_id}/lockdown' res = api_call(uri=uri, method='put', headers=headers, data=json.dumps(payload)) return res
额外排查思路
遇到文档未覆盖的参数问题时,可尝试:
- 调用接口的
OPTIONS方法,查看官方返回的参数规范 - 抓包分析Cylance官方控制台发起的同类型请求,参考其参数结构
- 联系Cylance技术支持确认最新接口要求
内容的提问来源于stack exchange,提问作者DovanKing
相关产品推荐
相关产品推荐

