云服务器内容精选

  • 方式三:使用Python语言通过AppCode认证鉴权方式发送预测请求 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见在Python环境中集成API请求签名的SDK。 创建请求体,进行预测请求。 输入为文件格式 # coding=utf-8 import requests import os if __name__ == '__main__': # Config url, app code and file path. url = "在线服务的调用地址" # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 app_code = os.environ["HUAWEICLOUD_APP_CODE"] file_path = "预测文件的本地路径" # Send request. headers = { 'X-Apig-AppCode': app_code } files = { 'images': open(file_path, 'rb') } resp = requests.post(url, headers=headers, files=files) # Print result print(resp.status_code) print(resp.text) “files”中的参数名由在线服务的输入参数决定,需要和“类型”为“file”的输入参数“名称”保持一致。此处以“images”为例。 输入为文本格式(json类型) 读取本地预测文件并进行base64编码的请求体示例如下: # coding=utf-8 import base64 import requests import os if __name__ == '__main__': # Config url, app code and request body. url = "在线服务的调用地址" # 认证用的app_code硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_code保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_CODE。 app_code = os.environ["HUAWEICLOUD_APP_CODE"] file_path = "预测文件的本地路径" with open(file_path, "rb") as file: base64_data = base64.b64encode(file.read()).decode("utf-8") # Send request headers = { 'Content-Type': 'application/json', 'X-Apig-AppCode': app_code } body = { 'image': base64_data } resp = requests.post(url, headers=headers, json=body) # Print result print(resp.status_code) print(resp.text) “body”中的参数名由在线服务的输入参数决定,需要和“类型”为“string”的输入参数“名称”保持一致。此处以“image”为例。“body”中的base64_data值为string类型。
  • APP认证鉴权 当支持APP认证功能的在线服务运行成功处于“运行中”状态,就可以对服务进行调用 。在调用之前您需要进行APP认证鉴权。 当使用APP认证,且开启了简易认证模式,API请求既可以选择使用Appkey和AppSecret做签名和校验,也可以选择使用AppCode进行简易认证(ModelArts默认启用简易认证)。推荐使用AppKey/AppSecret认证,其安全性比AppCode认证要高。 AppKey/AppSecret认证:通过AppKey与AppSecret对请求进行加密签名,可标识发送方并防止请求被修改。使用AppKey/AppSecret认证时,您需要使用专门的签名SDK对请求进行签名。 AppKey:APP访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。 AppSecret:APP私有访问密钥,即与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。 AppKey进行简易认证时,即在调用API的时候,在HTTP请求头部消息增加一个参数“apikey”(参数值为“AppKey”),实现快速认证。 AppCode认证:通过AppCode认证通用请求。 AppCode认证就是在调用API的时候,在HTTP请求头部消息增加一个参数“X-Apig-AppCode”(参数值为“AppCode”),而不需要对请求内容签名,API网关也仅校验AppCode,不校验请求签名,从而实现快速响应。 您可以在服务详情页的“调用指南”页签(如图5)或者在线服务授权管理页面(如图2)获取API接口和AppKey/AppSecret和AppCode。请注意使用图中红框所示的API接口公网地址。当模型配置文件中apis定义了路径,调用地址后需拼接自定义路径。如:“{在线服务的调用地址}/predictions/poetry”。 图5 获取API的接口地址
  • 方式一:使用Python语言通过AppKey+AppSecret认证鉴权方式发送预测请求 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见在Python环境中集成API请求签名的SDK。 创建请求体,进行预测请求。 输入为文件格式 # coding=utf-8 import requests import os from apig_sdk import signer if __name__ == '__main__': # Config url, ak, sk and file path. url = "在线服务的调用地址" # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 app_key = os.environ["HUAWEICLOUD_APP_KEY"] app_secret= os.environ["HUAWEICLOUD_APP_SECRET"] file_path = "预测文件的本地路径" # Create request, set method, url, headers and body. method = 'POST' headers = {"x-sdk-content-sha256": "UNSIGNED-PAYLOAD"} request = signer.HttpRequest(method, url, headers) # Create sign, set the AK/SK to sign and authenticate the request. sig = signer.Signer() sig.Key = app_key sig.Secret = app_secret sig.Sign(request) # Send request files = {'images': open(file_path, 'rb')} resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, files=files) # Print result print(resp.status_code) print(resp.text) “files”参数的请求体样式为“files={"请求参数":("文件路径",文件内容,“文件类型”)}”,参数填写可以参考表1。 表1 files参数说明 参数 是否必填 说明 请求参数 是 在线服务输入参数名称。 文件路径 否 上传文件的路径。 文件内容 是 上传文件的内容。 文件类型 否 上传文件类型。当前支持以下类型: txt类型:text/plain jpg/jpeg类型:image/jpeg png类型:image/png 输入为文本格式(json类型) 读取本地预测文件并进行base64编码的请求体示例如下: # coding=utf-8 import base64 import json import os import requests from apig_sdk import signer if __name__ == '__main__': # Config url, ak, sk and file path. url = "在线服务的调用地址" # 认证用的app_key和app_secret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; # 本示例以app_key和app_secret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 app_key = os.environ["HUAWEICLOUD_APP_KEY"] app_secret= os.environ["HUAWEICLOUD_APP_SECRET"] file_path = "预测文件的本地路径" with open(file_path, "rb") as file: base64_data = base64.b64encode(file.read()).decode("utf-8") # Create request, set method, url, headers and body. method = 'POST' headers = { 'Content-Type': 'application/json' } body = { 'image': base64_data } request = signer.HttpRequest(method, url, headers, json.dumps(body)) # Create sign, set the AppKey&AppSecret to sign and authenticate the request. sig = signer.Signer() sig.Key = app_key sig.Secret = app_secret sig.Sign(request) # Send request resp = requests.request(request.method, request.scheme + "://" + request.host + request.uri, headers=request.headers, data=request.body) # Print result print(resp.status_code) print(resp.text) “body”中的参数名由在线服务的输入参数决定,需要和“类型”为“string”的输入参数“名称”保持一致。此处以“image”为例。“body”中的base64_data值为string类型。
  • 方式二:使用Java语言通过AppKey+AppSecret认证鉴权方式发送预测请求 下载Java SDK并在开发工具中完成SDK配置。具体操作请参见在Java环境中集成API请求签名的SDK。 创建Java类,进行预测请求。 由于在APIG的Java SDK中,“request.setBody()”只支持String类型,所以只支持输入为文本格式的预测请求。 此处以json格式为例介绍读取本地预测文件并进行base64编码的请求体: // Package name of the demo. package com.apig.sdk.demo; import com.cloud.apigateway.sdk.utils.Client; import com.cloud.apigateway.sdk.utils.Request; import org.apache.http.HttpHeaders; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpRequestBase; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; public class MyAkSkTest { public static void main(String[] args) { String url = "在线服务的调用地址"; // 认证用的appKey和appSecret硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以appKey和appSecret保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_APP_KEY和HUAWEICLOUD_APP_SECRET。 String appKey = System.getenv("HUAWEICLOUD_APP_KEY"); String appSecret = System.getenv("HUAWEICLOUD_APP_SECRET"); String body = "{}"; try { // Create request Request request = new Request(); // Set the AK/AppSecret to sign and authenticate the request. request.setKey(appKey); request.setSecret(appSecret); // Specify a request method, such as GET, PUT, POST, DELETE, HEAD, and PATCH. request.setMethod(HttpPost.METHOD_NAME); // Add header parameters request.addHeader(HttpHeaders.CONTENT_TYPE, "application/json"); // Set a request URL in the format of https://{Endpoint}/{URI}. request.setUrl(url); // Special characters, such as the double quotation mark ("), contained in the body must be escaped. request.setBody(body); // Sign the request. HttpRequestBase signedRequest = Client.sign(request); // Send request. CloseableHttpResponse response = HttpClients.createDefault().execute(signedRequest); // Print result System.out.println(response.getStatusLine().getStatusCode()); System.out.println(EntityUtils.toString(response.getEntity())); } catch (Exception e) { e.printStackTrace(); } } } “body”由具体文本格式决定,此处以json为例。
  • 方式一:使用图形界面的软件进行预测(以Postman为例) 下载Postman软件并安装,您也可以直接在Chrome浏览器添加Postman扩展程序(也可使用其他支持发送post请求的软件)。Postman推荐使用7.24.0版本。 打开Postman,如图3所示。 图3 Postman界面 在Postman界面填写参数,以图像分类举例说明。 选择POST任务,将在线服务的调用地址复制到POST后面的方框。Headers页签的Key值填写为“X-Auth-Token”,Value值为用户Token。 您也可以通过AK(Access Key ID)/SK(Secret Access Key)加密调用请求,具体可参见用户AK-SK认证模式。 图4 参数填写 在Body页签,根据AI应用的输入参数不同,可分为2种类型:文件输入、文本输入。 文件输入 选择“form-data”。在“KEY”值填写AI应用的入参,和在线服务的输入参数对应,比如本例中预测图片的参数为“images”。然后在“VALUE”值,选择文件,上传一张待预测图片(当前仅支持单张图片预测),如图5所示。 图5 填写Body 文本输入 选择“raw”,选择JSON(application/json)类型,在下方文本框中填写请求体,请求体样例如下: { "meta": { "uuid": "10eb0091-887f-4839-9929-cbc884f1e20e" }, "data": { "req_data": [ { "sepal_length": 3, "sepal_width": 1, "petal_length": 2.2, "petal_width": 4 } ] } } 其中,“meta”中可携带“uuid”,调用时传入一个“uuid”,返回预测结果时回传此“uuid”用于跟踪请求,如无此需要可不填写meta。“data”包含了一个“req_data”的数组,可传入单条或多条请求数据,其中每个数据的参数由AI应用决定,比如本例中的“sepal_length”、“sepal_width”等。 参数填写完成,单击“send”发送请求,结果会在“Response”下的对话框里显示。 文件输入形式的预测结果样例如图6所示,返回结果的字段值根据不同AI应用可能有所不同。 文本输入形式的预测结果样例如图7所示,请求体包含“meta”及“data”。如输入请求中包含“uuid”,则输出结果中回传此“uuid”。如未输入,则为空。“data”包含了一个“resp_data”的数组,返回单条或多条输入数据的预测结果,其中每个结果的参数由AI应用决定,比如本例中的“sepal_length”、“predictresult”等。 图6 文件输入预测结果 图7 文本输入预测结果
  • 方式三:使用Python语言发送预测请求 下载Python SDK并在开发工具中完成SDK配置。具体操作请参见在Python环境中集成API请求签名的SDK。 创建请求体,进行预测请求。 输入为文件格式 # coding=utf-8 import requests if __name__ == '__main__': # Config url, token and file path. url = "在线服务的调用地址" token = "用户Token" file_path = "预测文件的本地路径" # Send request. headers = { 'X-Auth-Token': token } files = { 'images': open(file_path, 'rb') } resp = requests.post(url, headers=headers, files=files) # Print result. print(resp.status_code) print(resp.text) “files”中的参数名由在线服务的输入参数决定,需要和“类型”为“file”的输入参数“名称”保持一致。以前提条件里获取的文件预测输入参数“images”为例。 输入为文本格式(json类型) 读取本地预测文件并进行base64编码的请求体示例如下: # coding=utf-8 import base64 import requests if __name__ == '__main__': # Config url, token and file path url = "在线服务的调用地址" token = "用户Token" file_path = "预测文件的本地路径" with open(file_path, "rb") as file: base64_data = base64.b64encode(file.read()).decode("utf-8") # Set body,then send request headers = { 'Content-Type': 'application/json', 'X-Auth-Token': token } body = { 'image': base64_data } resp = requests.post(url, headers=headers, json=body) # Print result print(resp.status_code) print(resp.text) “body”中的参数名由在线服务的输入参数决定,需要和“类型”为“string”的输入参数“名称”保持一致。以前提条件里获取的文本预测输入参数“image”为例。“body”中的base64_data值为string类型。