通過HTTPS協議訪問執行個體
本文介紹如何通過HTTPS協議訪問已開啟安全訪問代理的目標執行個體。
前提條件
-
執行個體已開啟安全訪問代理。
說明在的已開通頁面,查看已開啟安全訪問代理的執行個體列表。如需開啟,請參見開啟安全訪問代理。
-
您已獲得安全訪問代理的授權。
說明在安全訪問代理的詳情頁面,查看執行個體的授權情況。如果您還沒有獲得授權,請參見申請安全訪問代理授權。
注意事項
開啟安全訪問代理的安全協同執行個體受安全規則的限制,建議您將單次查詢的返回資料行數限制為最多3000行。若查詢的資料行數過多,DMS將不保證穩定性。
-
若希望避免安全規則的限制,請使用資料庫控制台提供的串連地址訪問資料庫,或聯絡DMS支援人員評估具體情境。
-
如果是非安全協同執行個體,不支援自主配置查詢最大返回行數。預設查詢最大返回行數為3000。
請求參數說明
|
參數名 |
含義 |
是否必須 |
傳遞方式 |
|
accessId |
AccessID |
是 |
accessId支援以下傳值方式:
|
|
accessSecret |
AccessSecret |
是 |
accessSecret支援以下傳值方式:
|
|
schema |
資料庫名稱 |
否 |
schema支援以下傳值方式:
|
|
sql |
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 databases。
-
使用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程式訪問的樣本。
說明以Python 2版本訪問舉例。
GET請求:
import requests url = "https://[串連地址]/server/[您的資料庫名]?accessId=[您的AccessID]&accessSecret=[您的AccessSecret]&sql=[sql語句]" print requests.get(url).textGET請求樣本:
import requests url = "https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/database?accessId=user&accessSecret=pwd&sql=SHOW DATABASES" print requests.get(url).textPOST請求:
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語句]').textPOST請求樣本:
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請求:在Postman中使用GET方法請求URL:
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/[您的資料庫名],並在URL params中設定以下參數:accessId為您的AccessID,accessSecret為您的AccessSecret,sql為要執行的SQL語句(例如SHOW DATABASES),然後單擊Send發送請求。POST請求:在Postman中將要求方法設為POST,URL設定為
https://dpxxxx-xxxxxxxx.proxy.dms.aliyuncs.com/server/[您的資料庫名]。在Headers中添加三個參數:Content-Type設為text/plain、accessId設為您的AccessID、accessSecret設為您的AccessSecret。在Body地區選取項目raw格式和Text類型,輸入SQL語句(如SHOW DATABASES),然後單擊Send發送請求。