本文介绍如何通过HTTPS协议访问已开启安全访问代理的目标实例。

前提条件

  • 实例已开启安全访问代理。
    说明安全与规范 > 安全访问代理已开通页面,查看已开启安全访问代理的实例列表。如需开启,请参见开启数据安全防护
  • 您已获得安全访问代理的授权。
    说明 在安全访问代理的详情页面,查看实例的授权情况。如果您还没有获得授权,请参见申请安全访问代理授权

请求参数说明

参数名 含义 是否必须 传递方式
accessId AccessID accessId支持以下传值方式:
  • Query参数。

    例如:?accessId=AccessID

  • Header参数。

    例如:accessId:AccessID

accessSecret AccessSecret accessSecret支持以下传值方式:
  • Query参数。

    例如:?accessSecret=AccessSecret

  • Header参数。

    例如:accessSecret:AccessSecret

schema 数据库名称 schema支持以下传值方式:
  • URL路径参数。

    例如:/server/[您的数据库名]

  • Body参数。

    例如:{ "schema": "[您的数据库名]" }

sql SQL语句 SQL支持以下传值方式:
  • URL参数。
  • Body参数。

    例如:纯文本格式:[您的SQL语句]

    JSON格式:{ "sql": "[您的SQL语句]" }

返回值说明

通过HTTPS协议访问,以JSON格式返回数据。

JSON对象格式如下:

字段名 类型 描述
columnMetas Array 字段元信息列表。
columnName String 字段名。
columnLabel String 字段标签,对应SQL语句中as后的别名,没有别名时,则与columnName一致。
columnTypeName String 字段类型,例如VARCHAR,BIGINT等。
precision Integer 精度,部分字段类型包含精度定义,例如VARCHAR(32)的精度为32。
scale Integer 范围,浮点型的字段类型包含范围定义,表示小数位数,例如DECIMAL(10,2)的范围为2。
nullable Boolean 能否为空,true表示值可以为空,false表示值不可为空。
autoIncrement Boolean 是否自增,true表示自增,false表示非自增。
tableName String 字段所在的表名。
msg String 执行出错时,返回错误信息。
updateCount Integer 执行DML时,影响的记录数。
requestId String 请求ID,遇到问题时用于帮助排查。
rowCount Integer 查询操作时,返回的记录数。
rows Array 查询操作时,返回的记录列表,数组中每个元素表示一行数据,与List Map结构相同。
success Boolean 执行是否成功,true表示成功,false表示失败。

返回值示例如下:

  • 成功查询到数据。
    {
      "columnMetas": [
        {
          "columnName":"column1",
          "columnLabel":"column1",
          "columnTypeName":"varchar",
          "precision":10,
          "scale":2,
          "nullable":true,
          "autoIncrement":true,
          "tableName":"table1"
        },
        {
          "columnName":"column2",
          "columnLabel":"column2",
          "columnTypeName":"varchar",
          "precision":10,
          "scale":2,
          "nullable":true,
          "autoIncrement":true,
          "tableName":"table1"
        } 
      ],
      "updateCount": 0,
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "rowCount": 1,
      "rows": [
        {
          "col1": 1,
          "col2": "xxxx"
        }
      ],
      "success": true
    }
  • 成功更新数据。
    {
      "updateCount": 0,
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "success": true
    }
  • 访问失败。
    {
      "message": 'AccessID is required.',
      "requestId": "xhqej0xgcytbhc8scjopgqsywcaibi",
      "success": false
    }

访问示例

您可以通过命令行、数据库管理工具、程序代码来访问已开启安全访问代理的目标实例。

假设连接地址为dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com,数据库名称为database,accessId为user,accessSecret为pwd,SQL命令为show database。

  • 使用CURL命令行访问的示例。
    # GET请求
    curl 'https://[您的连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[SQL语句]'
    # GET请求示例
    #curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW%20DATABASES'
    # POST请求
    curl 'https://[您的连接地址]/server/[您的数据库名]' -H 'accessId:[您的AccessID]' -H 'accessSecret:[您的AccessSecret] -H 'Content-Type:text/plain' -d '[SQL语句]'
    # POST请求示例
    curl 'https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database' -H 'accessId:user' -H 'accessSecret:pwd -H 'Content-Type:text/plain' -d 'SHOW DATABASES'
  • Python程序访问的示例。

    GET请求:

    import requests
    
    url = "https://[连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[sql语句]"
    print requests.get(url).text

    GET请求示例:

    import requests
    
    url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES"
    print requests.get(url).text

    POST请求:

    import requests
    
    url = "https://[连接地址]/server/[您的数据库名]"
    headers = {
        "Content-Type": "text/plain;charset=utf-8",
        "accessId": "[您的AccessID]",
        "accessSecret": "[您的AccessSecret]"
    }
    print requests.post(url, headers=headers, data='[sql语句]').text

    POST请求示例:

    import requests
    
    url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database"
    headers = {
        "Content-Type": "text/plain;charset=utf-8",
        "accessId": "user",
        "accessSecret": "pwd"
    }
    print requests.post(url, headers=headers, data='SHOW DATABASES').text
  • Node.js程序访问的示例。

    GET请求:

    const https = require("https");
    
    https.get("https://[连接地址]/server/[您的数据库名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=SHOW DATABASES", resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });

    GET请求示例:

    const https = require("https");
    
    https.get("https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES", resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });

    POST请求:

    const https = require("https");
    
    var req = https.request({
        hostname: '[连接地址]',
        port: 443,
        path: '/server/[您的数据库名]',
        method: 'POST',
        headers: {
            'Content-Type': 'text/plain; charset=UTF-8',
            accessId: '[您的AccessID]',
            accessSecret: '[您的AccessSecret]'
        }
    }, resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });
    req.write("[sql语句]");
    req.end();

    POST请求示例:

    const https = require("https");
    
    var req = https.request({
        hostname: 'dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com',
        port: 443,
        path: '/server/database',
        method: 'POST',
        headers: {
            'Content-Type': 'text/plain; charset=UTF-8',
            accessId: 'user',
            accessSecret: 'pwd'
        }
    }, resp => {
        resp.on("data", data => {
            console.log(JSON.parse(data));
        });
    });
    req.write("SHOW DATABASES");
    req.end();
  • Postman客户端访问的示例。
    GET请求:postmanget
    POST请求:postmanpost