首頁>技術>

1. 適用版本

適用於RPA2020.5版本

2. 介面 API 手冊

呼叫方式及欄位,請參考手冊,開啟方式如下:

部署 2020.5 平臺後,瀏覽器開啟https://ip/doc.html

3. Python 呼叫程式碼

如果想用機器人來調 API 介面,可參考以下程式碼,其它語言邏輯一樣:部分功能介面如無法呼叫,請參考手冊修改傳參

import hmacimport jsonfrom base64 import b64encodefrom hashlib import sha256from urllib.parse import urlparse, urlencode, quote, unquoteimport timeimport requestsdef get_token(url='', key='',secrect=''):    """    :param url: 請求地址,示例:https://192.168.202.11/oapi/v1/token    :return:返回token,[access_token,refresh_token]    """    params = {'accessKey': key, 'secretKey': secrect}    res = requests.get(url, params=params, verify=0)    return res.json()def refresh_token(url='',refresh_token=''):    """    :param url: 請求地址,示例:https://192.168.202.11/oapi/v1/token    :param refresh_token:str型,重新整理token    :return:返回token,[access_token,refresh_token]    """    json_str='refreshToken='+refresh_token    url = url+'?'+json_str    res = requests.get(url,verify=False)    return res.json()def rpa_base64_encode(data):    """    Base64編碼,並處理\r\n    :param data: 原始字元    :return: 編碼後的字元    """    encoded = b64encode(data.encode("utf-8")).decode("utf-8")    return encoded.replace("\r\n", "")def rpa_sha256(key, value):    """    SHA256加密,加密結果轉成16進位制字串形式    :param key: 金鑰    :param value: 原文    :return: 16進位制密文    """    key = key.encode("utf-8")    value = value.encode("utf-8")    ret = hmac.new(key, value, digestmod=sha256).hexdigest()    print("sha265:"+ ret)    return retdef sort_dict(d: dict) -> dict:    """    以字典的key按照升序排列    :param d: 字典物件    :return: 排序後的字典物件    """    return {key: value for key, value in sorted(d.items(), key=lambda item: item[0])}def rpa_url_encode(origin_data: dict, is_json=False, ts=""):    """    用url編碼資料,並處理特殊字元    Get方法、上傳檔案時設定is_json=False,其它情況為True    :param origin_data: 原始資料    :param is_json: 是否以json方式處理    :param ts: 時間戳,外界傳入    :return: 處理後的資料    """    if is_json is True:        data = json.dumps(origin_data, ensure_ascii=True)        data = data + f"×tamp={ts}"    else:        # Get方法需要對引數排序        sorted_data = sort_dict(origin_data)        # 新增時間戳        sorted_data.update({"timestamp": ts})        data = unquote(urlencode(sorted_data))    encoded = quote(data, encoding="utf-8")    r = encoded.replace("+", "+").replace("*", "%2A").replace("~", "%7E")    print('url編碼:'+r)    return rdef rpa_timestamp():    """RPA風格的時間戳"""    return f"{int(time.time() * 1000)}"def gen_signature(data: dict, is_json: bool, ts: str, token):    """    生成簽名    :param data: 請求引數    :param is_json: 是否以json方式處理(除Get和檔案上傳外,其它都用json方式)    :param ts: 時間戳,從外界傳入    :return: 簽名    """    #用url編碼資料,並處理特殊字元    encoded = rpa_url_encode(data, is_json, ts)    #SHA256加密,加密結果轉成16進位制字串形式    encrypted = rpa_sha256(token, encoded)    #Base64編碼,並處理\r\n    b64 = rpa_base64_encode(encrypted)    print('簽名:'+b64)    return b64class SendRequestFailed(Exception):    passdef rpa_rest_2020_5(method, url, params: dict, has_signature: bool = True,is_json:bool = True, timeout: int = None, token=""):    """    向服務端傳送請求    :param method: 請求方法,"GET", "POST", "PUT", "DELETE"    :param url: 請求地址,示例:https://192.168.202.11/oapi/v1/asset/list    :param params: 請求引數(GET的url引數或POST的Body引數)    :param has_signature: 是否簽名    :is_json:引數是否以json形式傳遞,GET、DELETE全部為False    :param timeout 超時時間    :param token    :return: 服務端返回資料(json)    """    assert method.upper() in ("GET", "POST", "PUT", "DELETE")    ts = rpa_timestamp()    print(f"時間戳:{ts}")    headers = None    if method.upper() in ["GET", "DELETE"]:        signature = gen_signature(params, is_json, ts, token)        print("sig:", signature)        if has_signature:            headers = {"accesstoken": token,"timestamp": ts,"signature": signature}        if method.upper() == "GET":            r = requests.get(url=url, headers=headers, params=params, timeout=timeout, verify=False)        else:            r = requests.delete(url=url, headers=headers, params=params, timeout=timeout, verify=False)    else:        if is_json:            signature = gen_signature(params, True, ts, token)        else:            signature = gen_signature(params, False, ts, token)                    if has_signature:            headers = {"accesstoken": token,"timestamp": ts,"signature": signature}                    if is_json:            r = requests.request(method=method, url=url, headers=headers, json=params, timeout=timeout, verify=False)        else:            r = requests.request(method=method, url=url, headers=headers, params=params, timeout=timeout, verify=False)    if r.status_code != 200:        raise SendRequestFailed(f"傳送請求失敗!伺服器返回碼:{r.status_code};返回內容:{r.text}.")    return r.text
4. 其它平臺或客戶端呼叫4.1 其它平臺呼叫

按照第 3 章的邏輯自行寫呼叫程式碼即可。

4.2 機器人呼叫

按照第 4 章新增一個全域性函式,在需要呼叫的地方使用全域性函式控制元件即可。

注:需要提前獲取token後呼叫,如無第三方平臺對接,獲取的token可存在共享變數裡,分配許可權呼叫,參考下圖:

access_token: 有效期預設30分鐘。可透過refresh_token重新整理。

6
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 為什麼 Vue3.0 要重寫響應式系統