日韩高清免费不卡一区,蜜桃精品人妻一区二区三区,三级黄色老熟妇视频网,台湾无码av一区二区三区

幫助與文檔 > 產(chǎn)品文檔 > 視覺智能服務 > API文檔 > 自定義識別
自定義識別

自定義模板文字識別服務簡介

說明

Hi,您好,歡迎使用有道智云自定義模版文字識別 API 接口服務。

本文檔主要針對需要集成 API 的技術(shù)開發(fā)工程師,詳細描述自定義模版文字識別能力相關(guān)的技術(shù)內(nèi)容。

如果您有與我們商務合作的需求,可以通過以下方式聯(lián)系我們:

商務郵箱: AIcloud_Business@corp.youdao.com

如果您對文檔內(nèi)容有任何疑問,可以通過以下幾種方式聯(lián)系我們:

客服 QQ:1906538062

智云 OCR 技術(shù)交流 QQ 1 群: 654064748

智云 OCR 技術(shù)交流 QQ 2 群: 471638046

聯(lián)系郵箱: zhiyun@corp.youdao.com

溫馨提示:

本文檔主要針對開發(fā)人員,接入測試前需要獲取應用ID應用密鑰;如果您還沒有,請按照 新手指南 操作。

平臺向每個賬戶贈送 50 元的體驗金,供用戶集成前測試所用,具體資費規(guī)則詳見 自定義模版文字服務報價 。

接口說明

自定義模板文字識別 API HTTPS 地址:

https://openapi.youdao.com/iocr

協(xié)議須知

調(diào)用方在集成自定義模板文字識別 API 時,請遵循以下規(guī)則。

規(guī)則 描述
傳輸方式 HTTPS
請求方式 POST
字符編碼 統(tǒng)一使用 UTF-8 編碼
請求格式 表單
響應格式 JSON

接口調(diào)用參數(shù)

調(diào)用 API 需要向接口發(fā)送以下字段來訪問服務。

字段名 類型 含義 必填 備注
q text 待識別圖像 Base64 True 必須是 Base64 編碼
templateId text 模版 Id false 模版 Id。當generalOcr為true時,該字段可以為空
format text 圖片類型填寫'img',pdf填寫'pdf' False 默認img
appKey text 應用 ID True 可在 應用管理 查看
salt text UUID,和 curtime 一起防請求重放 True uuid,唯一通用識別碼
signType text 簽名類型 True v3
curtime text 當前 UTC 時間戳(秒) True TimeStamp
sign text 簽名 True sha256(應用 ID+input+salt+curtime+應用密鑰)
generalOcr text 是否包含通用OCR結(jié)果 false 默認false。如果為true,結(jié)果中會包含通用OCR結(jié)果

簽名生成方法如下: signType=v3; sign=sha256(應用ID+input+salt+curtime+應用密鑰)。 其中,input 的計算方式為:input=q前10個字符 + q長度 + q后10個字符(當 q 長度大于 20)或 input=q字符串(當 q 長度小于等于 20)。

  • 不同語言獲取時間戳,請參看此鏈接

如果對簽名有疑問,可以參看文檔末尾各語言 demo。

輸出結(jié)果

返回的結(jié)果是 json 格式,具體說明如下

字段名 類型 字段說明
errorCode text 錯誤碼,一定存在
Result text 識別結(jié)果,查詢成功一定存在
+template_id text 模版Id
+items JSONObject 字段名稱及識別結(jié)果
++識別區(qū)域信息 text 識別內(nèi)容,識別成功一定存在

示例

識別的返回結(jié)果:

{
  "errorCode": "0",
  "Result": {
    "template_id": "模版Id",
    "items": [
        {
          "key": "字段名稱",
          "value": "字段值",
          "locations": ["坐標信息"] // 如果有多區(qū)域同名,坐標會有多行,對應多個區(qū)域的坐標
        },
    ]
    "ocrResult": {
        // 通用OCR結(jié)果
    }
  }
}

支持語言

語言代碼 語言
sq 阿爾巴尼亞語
az 阿塞拜疆語
eu 巴斯克語
be 白俄羅斯語
bs 波斯尼亞文(拉丁文)
bg 保加利亞文
ca 加泰羅尼亞文(加泰隆語)
ceb 宿務語
ny 齊切瓦語
zh-CHS 中文
zh-CHT 中文(繁體)
co 科西嘉語
hr 克羅地亞文
cs 捷克文
da 丹麥文
nl 荷蘭文
en 英文
eo 世界語
et 愛沙尼亞文
fi 芬蘭文
fr 法文
gd 蘇格蘭蓋爾語
gl 加利西亞語
de 德文
ht 海地文
ha 豪薩語
haw 夏威夷語
hi 印地文
hu 匈牙利文
is 冰島語
ig 伊博語
id 印度尼西亞文
ga 愛爾蘭語
it 意大利文
ja 日文
jw 印尼爪哇語
ko 韓文
ku 庫爾德語
la 拉丁語
lv 拉脫維亞文
lt 立陶宛文
lb 盧森堡語
mk 馬其頓語
mg 馬爾加什語
ms 馬來文
mt 馬耳他文
mi 毛利語
mr 馬拉地語
mn 蒙古語
ne 尼泊爾語
no 挪威文
pl 波蘭文
pt 葡萄牙文
ro 羅馬尼亞文
ru 俄文
sm 薩摩亞語
sr-Latn 塞爾維亞文(拉丁文)
sn 修納語
sk 斯洛伐克文
sl 斯洛文尼亞文
so 索馬里語
st 塞索托語
es 西班牙文
su 印尼巽他語
sw 斯瓦希里文
sv 瑞典文
tl 菲律賓語
tg 塔吉克語
tr 土耳其文
uk 烏克蘭文
uz 烏茲別克語
vi 越南文
cy 威爾士文
fy 弗里斯蘭語
yo 約魯巴語
zu 南非祖魯語
hmn 苗族語
xh 班圖
af 南非荷蘭

服務配置

支持圖片格式 圖片大小 每小時最大查詢次數(shù)
jpg\png\bmp 4M內(nèi)(編碼后) 3600

錯誤代碼列表

錯誤碼 含義
101 缺少必填的參數(shù),首先確保必填參數(shù)齊全,然后,確認參數(shù)書寫是否正確。
102 不支持的語言類型
103 翻譯文本過長
104 不支持的 API 類型
105 不支持的簽名類型
106 不支持的響應類型
107 不支持的傳輸加密類型
108 應用 ID 無效,注冊賬號,登錄后臺創(chuàng)建應用和實例并完成綁定,可獲得應用 ID 和應用密鑰等信息
109 batchLog 格式不正確
110 無相關(guān)服務的有效實例,應用沒有綁定服務實例,可以新建服務實例,綁定服務實例。注:某些服務的結(jié)果發(fā)音需要 tts 實例,需要在控制臺創(chuàng)建語音合成實例綁定應用后方能使用。
111 開發(fā)者賬號無效
112 請求服務無效
113 img 不能為空
114 不支持的圖片傳輸方式
201 解密失敗,可能為 DES,BASE64,URLDecode 的錯誤
202 簽名檢驗失敗,如果確認應用 ID 和應用密鑰的正確性,仍返回 202,一般是編碼問題。請確保翻譯文本 q 為 UTF-8 編碼.
203 訪問 IP 地址不在可訪問 IP 列表
205 請求的接口與應用的平臺類型不一致,,確保接入方式(Android SDK、IOS SDK、API)與創(chuàng)建的應用平臺類型一致。如有疑問請參考入門指南
206 因為時間戳無效導致簽名校驗失敗
207 重放請求
301 辭典查詢失敗
302 翻譯查詢失敗
303 服務端的其它異常
304 會話閑置太久超時
401 賬戶已經(jīng)欠費停
402 offlinesdk 不可用
411 訪問頻率受限,請稍后訪問
412 長請求過于頻繁,請稍后訪問
1001 無效的 OCR 類型
1002 不支持的 OCR image 類型
1003 不支持的 OCR Language 類型
1004 識別圖片過大
1201 圖片 base64 解密失敗
1301 OCR 段落識別失敗
1411 訪問頻率受限
1412 超過最大識別字節(jié)數(shù)
2003 不支持的語言識別 Language 類型
2004 合成字符過長
2005 不支持的音頻文件類型
2006 不支持的發(fā)音類型
2201 解密失敗
2301 服務的異常
2411 訪問頻率受限,請稍后訪問
2412 超過最大請求字符數(shù)
3001 不支持的語音格式
3002 不支持的語音采樣率
3003 不支持的語音聲道
3004 不支持的語音上傳類型
3005 不支持的語言類型
3006 不支持的識別類型
3007 識別音頻文件過大
3008 識別音頻時長過長
3009 不支持的音頻文件類型
3010 不支持的發(fā)音類型
3201 解密失敗
3301 語音識別失敗
3302 語音翻譯失敗
3303 服務的異常
3411 訪問頻率受限,請稍后訪問
3412 超過最大請求字符數(shù)
4001 不支持的語音識別格式
4002 不支持的語音識別采樣率
4003 不支持的語音識別聲道
4004 不支持的語音上傳類型
4005 不支持的語言類型
4006 識別音頻文件過大
4007 識別音頻時長過長
4201 解密失敗
4301 語音識別失敗
4303 服務的異常
4411 訪問頻率受限,請稍后訪問
4412 超過最大請求時長
5001 無效的 OCR 類型
5002 不支持的 OCR image 類型
5003 不支持的語言類型
5004 識別圖片過大
5005 不支持的圖片類型
5006 文件為空
5201 解密錯誤,圖片 base64 解密失敗
5301 OCR 段落識別失敗
5411 訪問頻率受限
5412 超過最大識別流量
9001 不支持的語音格式
9002 不支持的語音采樣率
9003 不支持的語音聲道
9004 不支持的語音上傳類型
9005 不支持的語音識別 Language 類型
9301 ASR 識別失敗
9303 服務器內(nèi)部錯誤
9411 訪問頻率受限(超過最大調(diào)用次數(shù))
9412 超過最大處理語音長度
10001 無效的 OCR 類型
10002 不支持的 OCR image 類型
10004 識別圖片過大
10201 圖片 base64 解密失敗
10301 OCR 段落識別失敗
10411 訪問頻率受限
10412 超過最大識別流量
11001 不支持的語音識別格式
11002 不支持的語音識別采樣率
11003 不支持的語音識別聲道
11004 不支持的語音上傳類型
11005 不支持的語言類型
11006 識別音頻文件過大
11007 識別音頻時長過長,最大支持 30s
11201 解密失敗
11301 語音識別失敗
11303 服務的異常
11411 訪問頻率受限,請稍后訪問
11412 超過最大請求時長
12001 圖片尺寸過大
12002 圖片 base64 解密失敗
12003 引擎服務器返回錯誤
12004 圖片為空
12005 不支持的識別圖片類型
12006 圖片無匹配結(jié)果
13001 不支持的角度類型
13002 不支持的文件類型
13003 表格識別圖片過大
13004 文件為空
13301 表格識別失敗
15001 需要圖片
15002 圖片過大(1M)
15003 服務調(diào)用失敗
17001 需要圖片
17002 圖片過大(3M)
17003 識別類型未找到
17004 不支持的識別類型
17005 服務調(diào)用失敗
28102 不支持的 image 類型
28104 識別圖片過大, 圖片大小上限 4M
28200 模版不存在, 請檢查模版 Id 是否正確
28201 模版未發(fā)布, 請在模版詳情頁面發(fā)布模版
28202 模版已失效
28203 模版用戶不匹配
28204 不支持的模板使用方式
28205 模版創(chuàng)建失敗
28206 文字識別失敗
28207 不支持的generalOcr參數(shù)
28208 模版Id不可為空
28301 請求失敗
28302 文件過大
28303 無此流水號
28304 不支持的后綴名
28400 字段格式名稱已存在
28401 字段格式操作失敗
28402 無此字段格式編號
28403 字段格式編號重復
28404 字段用戶不匹配

常用語言 Demo

Java 示例

import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class IOcrV3Demo {

    private static Logger logger = LoggerFactory.getLogger(OcrV3Demo.class);

    private static final String YOUDAO_URL = "https://openapi.youdao.com/iocr";

    private static final String APP_KEY = "您的應用ID";

    private static final String APP_SECRET = "您的應用密鑰";

    public static void main(String[] args) throws IOException {

        Map<String,String> params = new HashMap<String,String>();
        String q = loadAsBase64("圖片的路徑");
        String salt = String.valueOf(System.currentTimeMillis());
        params.put("q", q);
        params.put("templateId", 模版Id);
        params.put("signType", "v3");
        String curtime = String.valueOf(System.currentTimeMillis() / 1000);
        params.put("curtime", curtime);
        String signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET;
        String sign = getDigest(signStr);
        params.put("appKey", APP_KEY);
        params.put("salt", salt);
        params.put("sign", sign);
        String result = requestForHttp(YOUDAO_URL,params);
        /** 處理結(jié)果 */
        System.out.println(result);
    }

    public static String requestForHttp(String url,Map<String,String> params) throws IOException {
        String result = "";

        /** 創(chuàng)建HttpClient */
        CloseableHttpClient httpClient = HttpClients.createDefault();

        /** httpPost */
        HttpPost httpPost = new HttpPost(url);
        List<NameValuePair> paramsList = new ArrayList<NameValuePair>();
        Iterator<Map.Entry<String,String>> it = params.entrySet().iterator();
        while(it.hasNext()){
            Map.Entry<String,String> en = it.next();
            String key = en.getKey();
            String value = en.getValue();
            paramsList.add(new BasicNameValuePair(key,value));
        }
        httpPost.setEntity(new UrlEncodedFormEntity(paramsList,"UTF-8"));
        CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
        try{
            HttpEntity httpEntity = httpResponse.getEntity();
            result = EntityUtils.toString(httpEntity,"UTF-8");
            EntityUtils.consume(httpEntity);
        }finally {
            try{
                if(httpResponse!=null){
                    httpResponse.close();
                }
            }catch(IOException e){
                logger.info("## release resouce error ##" + e);
            }
        }
        return result;
    }

    /**
     * 生成加密字段
     */
    public static String getDigest(String string) {
        if (string == null) {
            return null;
        }
        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
        byte[] btInput = string.getBytes(StandardCharsets.UTF_8);
        try {
            MessageDigest mdInst = MessageDigest.getInstance("SHA-256");
            mdInst.update(btInput);
            byte[] md = mdInst.digest();
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

    public static String loadAsBase64(String imgFile)
  {//將圖片文件轉(zhuǎn)化為字節(jié)數(shù)組字符串,并對其進行Base64編碼處理

    File file = new File(imgFile);
    if(!file.exists()){
        logger.error("文件不存在");
        return null;
    }
    InputStream in = null;
    byte[] data = null;
      //讀取圖片字節(jié)數(shù)組
    try
    {
        in = new FileInputStream(imgFile);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
      //對字節(jié)數(shù)組Base64編碼
    return Base64.getEncoder().encodeToString(data);//返回Base64編碼過的字節(jié)數(shù)組字符串
  }

  public static String truncate(String q) {
        if (q == null) {
            return null;
        }
        int len = q.length();
        String result;
        return len <= 20 ? q : (q.substring(0, 10) + len + q.substring(len - 10, len));
    }
}

Python 示例

# -*- coding: utf-8 -*-
import sys
import uuid
import requests
import base64
import hashlib
import time

reload(sys)
sys.setdefaultencoding('utf-8')

YOUDAO_URL = 'https://openapi.youdao.com/iocr'
APP_KEY = '您的應用ID'
APP_SECRET = '您的應用密鑰'


def truncate(q):
    if q is None:
        return None
    q_utf8 = q.decode("utf-8")
    size = len(q_utf8)
    return q_utf8 if size <= 20 else q_utf8[0:10] + str(size) + q_utf8[size - 10:size]


def encrypt(signStr):
    hash_algorithm = hashlib.sha256()
    hash_algorithm.update(signStr.encode('utf-8'))
    return hash_algorithm.hexdigest()


def do_request(data):
    headers = {'Content-Type': 'application/x-www-form-urlencoded'}
    return requests.post(YOUDAO_URL, data=data, headers=headers)


def connect():
    f = open(r'圖片的路徑', 'rb')  # 二進制方式打開圖文件
    q = base64.b64encode(f.read())  # 讀取文件內(nèi)容,轉(zhuǎn)換為base64編碼
    f.close()

    data = {}
    data['q'] = q
    data['templateId'] = 模版id
    data['signType'] = 'v3'
    curtime = str(int(time.time()))
    data['curtime'] = curtime
    salt = str(uuid.uuid1())
    signStr = APP_KEY + truncate(q) + salt + curtime + APP_SECRET
    sign = encrypt(signStr)
    data['appKey'] = APP_KEY
    data['salt'] = salt
    data['sign'] = sign

    response = do_request(data)
    print response.content


if __name__ == '__main__':
    connect()

C# 示例

using System;
using System.IO;
using System.Net;
using System.Text;
using System.Collections.Generic;
using System.Security.Cryptography;

namespace zhiyun_csharp_demo
{
    class OcrV3Demo
    {
        public static void Main()
        {
            Dictionary dic = new Dictionary();
            string url = "https://openapi.youdao.com/iocr";
            string q = LoadAsBase64("圖片的路徑");
            string appKey = "您的應用ID";
            string appSecret = "您的應用密鑰";
            string salt = DateTime.Now.Millisecond.ToString();
            dic.Add("templateId", 模版Id);
            dic.Add("signType", "v3");
            dic.Add("q", System.Web.HttpUtility.UrlEncode(q));
            TimeSpan ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc));
            long millis = (long) ts.TotalMilliseconds;
            string curtime = Convert.ToString(millis / 1000);
            dic.Add("curtime", curtime);
            string signStr = appKey + Truncate(q) + salt + curtime + appSecret;;
            string sign = ComputeHash(signStr, new SHA256CryptoServiceProvider());
            dic.Add("appKey", appKey);
            dic.Add("salt", salt);
            dic.Add("sign", sign);
            string result = Post(url, dic);
            Console.WriteLine(result);
        }

        protected static string ComputeHash(string input, HashAlgorithm algorithm)
        {
          Byte[] inputBytes = Encoding.UTF8.GetBytes(input);
          Byte[] hashedBytes = algorithm.ComputeHash(inputBytes);
          return BitConverter.ToString(hashedBytes).Replace("-", "");
        }

        protected static string Truncate(string q)
        {
            if (q == null)
            {
               return null;
            }
            int len = q.Length;
            return len <= 20 ? q : (q.Substring(0, 10) + len + q.Substring(len - 10, 10));
        }

        protected static string LoadAsBase64(string filename)
        {
            try
            {
                FileStream filestream = new FileStream(filename, FileMode.Open);
                byte[] arr = new byte[filestream.Length];
                filestream.Position = 0;
                filestream.Read(arr, 0, (int)filestream.Length);
                filestream.Close();
                return Convert.ToBase64String(arr);
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        protected static string Post(string url, Dictionary dic)
        {
            string result = "";
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
            req.Method = "POST";
            req.ContentType = "application/x-www-form-urlencoded";
            StringBuilder builder = new StringBuilder();
            int i = 0;
            foreach (var item in dic)
            {
                if (i > 0)
                    builder.Append("&");
                builder.AppendFormat("{0}={1}", item.Key, item.Value);
                i++;
            }
            byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
            req.ContentLength = data.Length;
            using (Stream reqStream = req.GetRequestStream())
            {
                reqStream.Write(data, 0, data.Length);
                reqStream.Close();
            }
            HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
            Stream stream = resp.GetResponseStream();
            using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
            {
                result = reader.ReadToEnd();
            }
            return result;
        }
    }
}

PHP 示例

<?php
define("CURL_TIMEOUT",   2000);
define("URL",            "https://openapi.youdao.com/iocr");
define("APP_KEY",        "您的應用ID"); // 替換為您的應用ID
define("SEC_KEY",        "您的應用密鑰"); // 替換為您的密鑰

function do_request($q)
{
     $salt = create_guid();
     $args = array(
        'appKey' => APP_KEY,
        'salt' => $salt,
     );
     $args['q'] = $q;
     $args['templateId'] = 模版Id;
     $args['signType'] = 'v3';
     $curtime = strtotime("now");
     $args['curtime'] = $curtime;
     $signStr = APP_KEY . truncate($q) . $salt . $curtime . SEC_KEY;
     $args['sign'] = hash("sha256", $signStr);
     $ret = call(URL, $args);
     print_r($ret);
     $ret = json_decode($ret, true);
     return $ret;
}

// 發(fā)起網(wǎng)絡請求
function call($url, $args=null, $method="post", $testflag = 0, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ret = false;
    $i = 0;
    while($ret === false)
    {
        if($i > 1)
            break;
        if($i > 0)
        {
            sleep(1);
        }
         $ret = callOnce($url, $args, $method, false, $timeout, $headers);
         $i++;
    }
    return $ret;
}

function callOnce($url, $args=null, $method="post", $withCookie = false, $timeout = CURL_TIMEOUT, $headers=array())
{
    $ch = curl_init();
    if($method == "post")
    {
        $data = convert($args);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_POST, 1);
    }
    else
    {
        $data = convert($args);
        if($data)
        {
            if(stripos($url, "?") > 0)
            {
                 $url .= "&$data";
            }
            else
            {
                 $url .= "?$data";
            }
        }
    }
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    if(!empty($headers))
    {
        curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    }
    if($withCookie)
    {
        curl_setopt($ch, CURLOPT_COOKIEJAR, $_COOKIE);
    }
    $r = curl_exec($ch);
    curl_close($ch);
    return $r;
}

function convert(&$args)
{
    $data = '';
    if (is_array($args))
    {
        foreach ($args as $key=>$val)
        {
            if (is_array($val))
            {
                foreach ($val as $k=>$v)
                {
                     $data .= $key.'['.$k.']='.rawurlencode($v).'&';
                }
            }
            else
            {
                     $data .="$key=".rawurlencode($val)."&";
            }
        }
        return trim($data, "&");
    }
    return $args;
}

// uuid generator
function create_guid(){
    $microTime = microtime();
    list($a_dec, $a_sec) = explode(" ", $microTime);
    $dec_hex = dechex($a_dec* 1000000);
    $sec_hex = dechex($a_sec);
    ensure_length($dec_hex, 5);
    ensure_length($sec_hex, 6);
    $guid = "";
    $guid .= $dec_hex;
    $guid .= create_guid_section(3);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= create_guid_section(4);
    $guid .= '-';
    $guid .= $sec_hex;
    $guid .= create_guid_section(6);
    return $guid;
}

function truncate($q) {
    $len = abslength($q);
    return $len <= 20 ? $q : (mb_substr($q, 0, 10) . $len . mb_substr($q, $len - 10, $len));
}

function abslength($str)
{
    if(empty($str)){
        return 0;
    }
    if(function_exists('mb_strlen')){
        return mb_strlen($str,'utf-8');
    }
    else {
        preg_match_all("/./u", $str, $ar);
        return count($ar[0]);
    }
}

function ensure_length(&$string, $length){
    $strlen = strlen($string);
    if($strlen < $length)
    {
         $string = str_pad($string, $length, "0");
    }
    else if($strlen > $length)
    {
         $string = substr($string, 0, $length);
    }
}

function create_guid_section($characters){
    $return = "";
    for($i = 0; $i < $characters; $i++)
    {
         $return .= dechex(mt_rand(0,15));
    }
    return $return;
}
// 輸入
$file = "圖片的路徑";
$fp = fopen($file, "r") or die("Can't open file");
// base64編碼
$q = base64_encode(fread($fp, filesize($file)));
fclose($fp);
do_request($q);
?>

更新記錄

日期 更新內(nèi)容
2020.04.10 更新接口返回值,測試接口地址
精品一二三四区中文字幕| 欧美成人精品一区二区免费看| 日韩精品高清在线| 国产精品一区二区在线观看91| 国产亚洲一区二区手机在线观看| 人妻熟女av一区二区三区| 免费观看的黄视频一级国产| 日本精品久久人妻一区二区三区| 99精品欧美一区二区三区喷胶| 999精品免费视频| 九九热在线精品免费看| 男人的下面进女人的下面在线观看| 欧美性做爰片免费视频看| 怎么样操女人的逼亚洲Av黄片段| 国产一区二区三区 韩国女主播| 免费看黑人操逼视频| 日本十八禁大骚逼| 国内不卡的中文字幕一区| 国产高清在线观看一区二区三区| 校花内射国产麻豆欧美一区| 精品一区二区视频在线观看| 97青青草免费在线观看| 国产 自拍 欧美 在线| 久久久一区二区三区日本| 亚洲av午夜福利精品一区| 美女的粉嫩小逼视频特写| 国产成人亚洲欧美久久| 久久久久九九九国产精品| 久久久久久久 亚洲精品| 免费看女人操逼玩| 两人爽爽爽无码免费视频| 好嗨哟直播看片在线观看| 无码毛片一区二区本码视频| 正在播放 国产精品推荐| 国产精选三级在线观看| 亚洲精品国产人久久| 操大屌粉的小穴视频| 阴茎大头插少妇蜜穴视频| 啊啊啊别操了视频| 中文字幕你懂的av一区二区| 国产欧美一区二区精品久久久|