通过token认证的方式访问在线服务-九游平台
如果在线服务的状态处于“运行中”,则表示在线服务已部署成功,部署成功的在线服务,将为用户提供一个可调用的api,此api为标准restful api。在集成至生产环境之前,需要对此api进行调测,您可以使用以下方式向在线服务发起预测请求:
- 方式一:使用图形界面的软件进行预测(以postman为例)。windows系统建议使用postman。
- 方式二:使用curl命令发送预测请求。linux系统建议使用curl命令。
- 方式三:使用python语言发送预测请求。
- 方式四:使用java语言发送预测请求。
约束限制
- 请求体的大小不超过12mb,超过后请求会被拦截。
- 因apig(api网关)限制,平台每次请求预测的时间不超过40秒。
前提条件
已经获取用户token、预测文件的本地路径、在线服务的调用地址和在线服务的输入参数信息。
- 用户token的获取请参见获取token认证。获取token认证时,由于modelarts生成的在线服务api不支持domain范围的token,因此需获取使用范围为project的token信息,即scope参数的取值为project。
- 预测文件的本地路径既可使用绝对路径(如windows格式"d:/test.png",linux格式"/opt/data/test.png"),也可以使用相对路径(如"./test.png")。
- 在线服务的调用地址和输入参数信息,可以在控制台的“在线服务详情 > 调用指南”页面获取。
“api接口公网地址”即在线服务的调用地址。当模型配置文件中apis定义了路径,调用地址后需拼接自定义路径。如:“{在线服务的调用地址}/predictions/poetry”。
图1 获取在线服务api接口地址和文件预测输入参数信息
方式一:使用图形界面的软件进行预测(以postman为例)
- 下载postman软件并安装,您也可以直接在chrome浏览器添加postman扩展程序(也可使用其他支持发送post请求的软件)。postman推荐使用7.24.0版本。
- 打开postman,如图2所示。
图2 postman界面
- 在postman界面填写参数,以图像分类举例说明。
- 选择post任务,将在线服务的调用地址复制到post后面的方框。headers页签的key值填写为“x-auth-token”,value值为用户token。
您也可以通过ak(access key id)/sk(secret access key)加密调用请求,具体可参见用户ak-sk认证模式。
图3 参数填写 - 在body页签,根据模型的输入参数不同,可分为2种类型:文件输入、文本输入。
- 文件输入
选择“form-data”。在“key”值填写模型的入参,和在线服务的输入参数对应,比如本例中预测图片的参数为“images”。然后在“value”值,选择文件,上传一张待预测图片(当前仅支持单张图片预测),如图4所示。
图4 填写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”用于跟踪请求,如无此需要可不填写meta。“data”包含了一个“req_data”的数组,可传入单条或多条请求数据,其中每个数据的参数由模型决定,比如本例中的“sepal_length”、“sepal_width”等。
- 文件输入
- 选择post任务,将在线服务的调用地址复制到post后面的方框。headers页签的key值填写为“x-auth-token”,value值为用户token。
- 参数填写完成,单击“send”发送请求,结果会在“response”下的对话框里显示。
方式二:使用curl命令发送预测请求
使用curl命令发送预测请求的命令格式也分为文件输入、文本输入两类。
- 文件输入
curl -kv -f 'images=@图片路径' -h 'x-auth-token:token值' -x post 在线服务地址
- “-k”是指允许不使用证书到ssl站点。
- “-f”是指上传数据的是文件,本例中参数名为“images”,这个名字可以根据具体情况变化,@后面是图片的存储路径。
- “-h”是post命令的headers,headers的key值为“x-auth-token”,这个名字为固定的, token值是获取的用户token。
- “post”后面跟随的是在线服务的调用地址。
curl命令文件输入样例:
curl -kv -f 'images=@/home/data/test.png' -h 'x-auth-token:miiskay***80t9whq==' -x post https://modelarts-infers-1.xxx/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83
- 文本输入
curl -kv -d '{"data":{"req_data":[{"sepal_length":3,"sepal_width":1,"petal_length":2.2,"petal_width":4}]}}' -h 'x-auth-token:miiskay***80t9whq==' -h 'content-type: application/json' -x post https://modelarts-infers-1.xxx/v1/infers/eb3e0c54-3dfa-4750-af0c-95c45e5d3e83
“-d”是body体的文本内容。
方式三:使用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类型。
- 输入为文件格式
方式四:使用java语言发送预测请求
- 下载java sdk并在开发工具中完成sdk配置。具体操作请参见在java环境中集成api请求签名的sdk。
- (可选)当预测请求的输入为文件格式时,java工程依赖httpmime模块。
- 在工程“libs”中增加httpmime-x.x.x.jar。完整的java依赖库如图7所示。
httpmime-x.x.x.jar建议使用4.5及以上版本,下载地址:。
图7 java依赖库 - httpmime-x.x.x.jar添加完成后,在java工程的.classpath文件中,补充httpmime信息,如下所示:
- 在工程“libs”中增加httpmime-x.x.x.jar。完整的java依赖库如图7所示。
- 创建java类,进行预测请求。
- 输入为文件格式
java的请求体示例如下:
// package name of the demo. package com.apig.sdk.demo; import org.apache.http.consts; import org.apache.http.httpentity; import org.apache.http.client.methods.closeablehttpresponse; import org.apache.http.client.methods.httppost; import org.apache.http.entity.contenttype; import org.apache.http.entity.mime.multipartentitybuilder; import org.apache.http.impl.client.httpclients; import org.apache.http.util.entityutils; import java.io.file; public class mytokenfile { public static void main(string[] args) { // config url, token and filepath string url = "在线服务的调用地址"; string token = "用户token"; string filepath = "预测文件的本地路径"; try { // create post httppost httppost = new httppost(url); // add header parameters httppost.setheader("x-auth-token", token); // add a body if you have specified the put or post method. special characters, such as the double quotation mark ("), contained in the body must be escaped. file file = new file(filepath); httpentity entity = multipartentitybuilder.create().addbinarybody("images", file).setcontenttype(contenttype.multipart_form_data).setcharset(consts.utf_8).build(); httppost.setentity(entity); // send post closeablehttpresponse response = httpclients.createdefault().execute(httppost); // print result system.out.println(response.getstatusline().getstatuscode()); system.out.println(entityutils.tostring(response.getentity())); } catch (exception e) { e.printstacktrace(); } } }
“addbinarybody”中的参数名由在线服务的输入参数决定,需要和“类型”为“file”的输入参数“名称”保持一致。此处以前提条件里获取的“images”为例。
- 输入为文本格式(json类型)
读取本地预测文件并进行base64编码的请求体示例如下:
// package name of the demo. package com.apig.sdk.demo; import org.apache.http.httpheaders; import org.apache.http.client.methods.closeablehttpresponse; import org.apache.http.client.methods.httppost; import org.apache.http.entity.stringentity; import org.apache.http.impl.client.httpclients; import org.apache.http.util.entityutils; public class mytokentest { public static void main(string[] args) { // config url, token and body string url = "在线服务的调用地址"; string token = "用户token"; string body = "{}"; try { // create post httppost httppost = new httppost(url); // add header parameters httppost.setheader(httpheaders.content_type, "application/json"); httppost.setheader("x-auth-token", token); // special characters, such as the double quotation mark ("), contained in the body must be escaped. httppost.setentity(new stringentity(body)); // send post. closeablehttpresponse response = httpclients.createdefault().execute(httppost); // print result system.out.println(response.getstatusline().getstatuscode()); system.out.println(entityutils.tostring(response.getentity())); } catch (exception e) { e.printstacktrace(); } } }
“body”由具体文本格式决定,此处以json为例。
- 输入为文件格式
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨