POST -打标签

介绍打标签接口的接口调用方式。

请求方式

POST

POST请求说明

一条完整的POST请求应当包含以下4个参数内容:
  • url:请求的地址。
  • headers:请求的HTTP标头。
  • data:发送的metadata信息,示例格式为:
    metadata = {
        "app": "appA",
        "queryID": str(uuid.uuid4()),
        "update": True,
        "sendBack": {"type": "response"},
        "labels": {
            "employID": "12340017",
        }
    }
  • files:待操作的本地文件。
注: 完整的代码示例,请查阅下方的Python请求示例

请求URL

https://<ucwi_endpoint>:5443/skg/v1/dlp/label/custom/<请求模式>
参数名称 参数位置 是否必须 描述
<请求模式> url
  • sync - 同步模式
  • async - 异步模式

请求Header

参数名称 参数位置 是否必须 描述
authorization header 请求中的认证信息。查阅章节获取详细信息认证
x-skg-timestamp header 当前的Timestamp。查阅章节获取详细信息认证

请求Body中的metadata

参数名 类型 适用状态 说明
labels Dict(必选) 同步和异步 增加的自定义标签内容
app String(必选) 同步和异步 WebService应用ID
update Boolean(可选) 同步和异步 是否更新已有标签,默认为False
sendBack Dict(必选) 同步和异步 打标签后返回文件的处理方式,支持本地返还、http上传,以及亚马逊S3、Swfit等云存储。
  • response:将打标签后的内容返回至当前路径。以下为代码示例:
    {
        "queryID": "1075893f-b0ed-4a76-a07d-df3d2fc0de46",
        ......
        "sendBack": {
            "type": "response", # 将标签后的内容返回至当前路径
        }
    }
  • httpUpload:将打标签后的内容发送至指定URL。以下为代码示例:
    {
        "queryID": "1075893f-b0ed-4a76-a07d-df3d2fc0de46",
        ......
        "sendBack": {
            "type": "httpUpload",
            "url": "http://172.11.11.6/callback", 
             # 将标签后的内容返发送至该url
        }
    }
  • s3:将打标签后的内容上传到s3对象存储的指定位置。以下为代码示例:
    {
        "queryID": "1075893f-b0ed-4a76-a07d-df3d2fc0de46",
        ......
        "sendBack": {
            "type": "s3",
            "s3Bucket": "test",
            "s3Region": "",  
             # 将标签后的文件上传到该位置。
             # 此处的值为使用s3时的region name,
             # 如果运行在EC2上并使用AWS IAM role,则以下三项可省略
            "accessKey": "aws_accessKey",
            "secretKey": "aws_secretKey",
            "endpointUrl": "",
        }
    }
    swift:将打标签后的内容上传到swift对象存储的指定位置。以下为代码示例:
    {
        "queryID": "1075893f-b0ed-4a76-a07d-df3d2fc0de46",
        ......
        "sendBack": {
            "type": "swift",
            "X-Auth-Token": "AUTH_tkbdac2a3474ee4d6396133c99cfd962c8",  
             # 使用swift时的认证token,
             # 如果提供的X-Auth-Token经验证有效,则以下三项可省略。
            "authUrl": "http://172.22.117.120:8080/auth/v1.0",
            "X-Auth-User": "test",
            "X-Auth-Key": "test",
            "objectUrl": "http://172.22.117.120:8080/auth/v1.0/AUTH_test/container1/1.txt",  
             # 将标签后的文件上传到swift对象存储的该对象URL位置。
             # objectUrl与ContainterUrl二选一。
            "containerUrl": "", 
             # 将标签后的文件上传到swift对象存储的该容器URL位置。
             # objectUrl与ContainterUrl二选一。
        }
    }
queryID String(必选) 同步和异步 sync/async (同步或异步模式)
uploadtype String(必选) 异步 只限于异步。支持AWS S3、阿里云OSS、腾讯云COS、Swift等云存储。
  • swift
  • oss
  • cos
  • s3
callback_url String(必选) 异步 只限于异步模式必须填写回调函数的url
objectInfo Dict(可选) 异步 只限于异步模式并使用对象存储时使用。异步模式支持审查存储在亚马逊S3、Swfit、阿里云OSS、腾讯云COS等云服务的对象存储。具体设置参数,参阅章节:异步模式下审查云服务存储内容的objectinfo参数

同步请求参数示例

{   
    "app": "875a2442-2fe6-49a5-abf7-00fbd727e99e",
    "queryID": "8a0aa812-0f80-4d25-8e3f-60583bac8b96",
    "update": True,
    "labels": {
        "test_key": "tt_value",
        "id": "8888"
    },
    "sendBack": {
        "type": "response"
    }
}

异步请求参数示例

{
    "labels": {
        "test_key": "tt_value",
        "id": "8888"
    },
    "app": "875a2442-2fe6-49a5-abf7-00fbd727e99e",
    "update": True,
    "queryID": "8a0aa812-0f80-4d25-8e3f-60583bac8b96",
    "callback_url": "http://172.11.9.1:8000/callback",
    "sendBack": {
        "type": "s3",
        "s3Bucket": "leo",
        "s3Region": "",  # 使用s3时的region name,如果运行在EC2上并使用AWS IAM role,则以下三项可省略
        "accessKey": "admin",
        "secretKey": "admin",
        "endpointUrl": "http://172.20.162.160:9000",
    },
    "uploadtype": "file"
}

Python请求示例 - 打标签

以下示例为使用Python代码调用接口,为本地文件打标签。

注: 在如下Python代码示例中,导入的Header文件ucwi_config ucwi_auth的需事先创建,如需详细参考示例,请参阅Header文件示例
# -*- coding: utf-8 -*-
from requests.packages.urllib3.exceptions import InsecureRequestWarning
from ucwi_config import UCWIConfig
from ucwi_auth import get_headers
import requests
import json
import os
import uuid
import time
from requests_toolbelt.multipart import decoder

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

api = "/skg/v1/dlp/label/custom/sync"
url = "{0}{1}".format(UCWIConfig.base_url, api)
file_path="CustomLabelTest.docx.RET.RET"

metadata = {
    "app": "appA",
    "queryID": str(uuid.uuid4()),
    "update": True,
    "sendBack": {"type": "response"},
    "labels": {
        "employID": "12340017",
        "Student-name": "peter",
        "BBB-XXX": "2222222",
        "EEE-XXX": "555555",
    }
}

headers = get_headers()
data = {"metadata": json.dumps(metadata)}
fd = open(file_path, 'rb')
files = {
    "request": fd
}
response = requests.post(url, headers=headers, data=data, files=files, verify=False)
fd.close()

if response.status_code != 200:
    print("Bad request, response code:", response.status_code)
    print(response.text)
else:
    if response.headers['Content-Type'] == 'application/json':
        info = response.json()
        print(info)
    elif response.headers['Content-Type'].startswith('multipart/form-data'):
        multipart_data = decoder.MultipartDecoder.from_response(response)
        for part in multipart_data.parts:
            content = part.content
            content_type = part.headers[b'content-type']
            content_disposition = part.headers[b'content-disposition']

            if content_type == b"application/json":
                info = json.loads(content)
                print("multipart info:{}".format(info))
            elif content_type == b"application/octet-stream":
                cd_info = [x.strip()
                           for x in content_disposition.decode('utf-8').split(';')]
                print("multipart xxx {}".format(cd_info))
                for item in cd_info[1:]:
                    index = item.find('=')
                    key, value = item[:index], item[index + 1:]
                    if key == 'filename':
                        filename = value.strip('"') + ".RET"
                        with open(filename, 'wb') as f:
                            f.write(content)

错误代码

若调用出现错误,将返回以下错误代码:
错误码 描述
400 无效参数
404 未知错误,例如请求了未触发的事件等。
500 无效参数