python使用pycurl接口调用modelarts推理服务
【摘要】 如果使用python代码pycurl实现推理服务的调用
iam_token.json文件和input.json文件准备参见,注意事项也参考
https://bbs.huaweicloud.com/blogs/233074
下面的代码需要根据自己的服务进行获取,获取方式同样参考https://bbs.huaweicloud.com/blogs/233074
代码一共分两部分,第一部分是获取token,第二部分是调用推理请求。获取token的代码每12个小时更新一次就可以,不能频繁的调用,如果每次推理请求都调用一次token的更新,会导致获取token请求被拒绝。
import pycurl
import json
import sys
import os
import certifi
from io import BytesIO
class Storage:
def __init__(self):
self.contents = ''
self.line = 0
def store(self, buf):
self.line = self.line + 1
self.contents = "%s%i: %s" % (self.contents, self.line, buf)
def __str__(self):
return self.contents
retrieved_body = Storage()
retrieved_headers = Storage()
buffer = BytesIO()
c = pycurl.Curl()
f = open('./iam_token.json')
data=f.read()
f.close()
c.setopt(c.URL,'https://iam.cn-east-3.myhuaweicloud.com/v3/auth/tokens')
c.setopt(pycurl.HTTPHEADER, ['Content-Type: application/json;charset=utf8'])
c.setopt(pycurl.POST, 1)
c.setopt(pycurl.POSTFIELDS, data)
c.setopt(c.WRITEFUNCTION, retrieved_body.store)
c.setopt(c.HEADERFUNCTION, retrieved_headers.store)
c.perform()
c.close()
tmp_rec_data=retrieved_headers.contents.split("\\r\\n")
tmp_token=""
for each_item in tmp_rec_data:
if "X-Subject-Token" in each_item:
start_index=each_item.find("X-Subject-Token")
tmp_token=each_item[(start_index + len("X-Subject-Token")):]
token_value = "X-Auth-Token" + tmp_token
#print(token_value)
c = pycurl.Curl()
buffer = BytesIO()
c.setopt(pycurl.HTTPHEADER, [token_value,'Content-Type: application/json;charset=utf8'])
c.setopt(c.URL,'https://xxxxx.apig.cn-east-3.huaweicloudapis.com/v1/infers/xxxxx')
c.setopt(pycurl.POST, 1)
c.setopt(c.WRITEDATA, buffer)
f = open('./input.json')
request_data=f.read()
f.close()
#print(request_data)
c.setopt(pycurl.POSTFIELDS, request_data)
c.perform()
c.close()
body = buffer.getvalue()
print(body.decode('utf-8'))
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)