阿里云人脸属性API,我已经成功了(高兴高兴)

简介: 想学习一下阿里的人脸识别API,Java版的参照https://help.aliyun.com/document_detail/67818.html?spm=a2c4g.11186623.6.559.a31e4bd9BDsnO9 已经没有问题,成功了。

想学习一下阿里的人脸识别API,Java版的参照https://help.aliyun.com/document_detail/67818.html?spm=a2c4g.11186623.6.559.a31e4bd9BDsnO9 已经没有问题,成功了。当我把这些代码转换为C#时,说死是不成功啊。
Java版中只是把其中的main函数改了一下,如下:

    public static void main(String[] args) throws Exception {
        setProxyofNeusoft();
        // 发送POST请求示例
        String ak_id = "my ak_id"; // 用户ak
        String ak_secret = "my secret"; // 用户ak_secret
        String url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute";
        
        String body = "{\"type\": \"0\", \"image_url\":\"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1540359146297&di=3218a5eefe6b89b990144478fe078e25&imgtype=0&src=http%3A%2F%2Fhimg2.huanqiu.com%2Fattachment2010%2F2015%2F0311%2F20150311030317329.jpg\"}";
        // String body = "{\"type\": \"1\", \"content\":\"xxx\"}";
        System.out.println("response body:" + sendPost(url, body, ak_id, ak_secret));
        
        body = "{\"type\": \"1\", \"content\":\"" + Base64.getEncoder().encodeToString(toByteArray("E:\\0531\\face\\WIN_20181023_16_31_35_Pro.jpg")) + "\"}";
        System.out.println("response body:" + sendPost(url, body, ak_id, ak_secret));
        
    }

当我使用C#来实现时,打死不成功啊。
Main函数如下:

static void Main(string[] args)
        {
            string ak_id = "my ak_id"; // 用户ak
            string ak_secret = "my secret"; // 用户ak_secret
            string url = "https://dtplus-cn-shanghai.data.aliyuncs.com/face/attribute";
            // 通过URL判断
            string body = "{\"type\": \"0\", \"image_url\":\"http://g.hiphotos.baidu.com/image/pic/item/730e0cf3d7ca7bcb944f655cb3096b63f624a889.jpg\"}";          
            Console.WriteLine("response body:" + DoPost(url, body, ak_id, ak_secret));
            Console.ReadLine();
        }

其中的DoPost函数如下:

public static string DoPost(string url, string body, string ak_id, string ak_secret)
        {             
            string result = string.Empty;
            HttpClient httpClient = new HttpClient();

            httpClient.MaxResponseContentBufferSize = 256000;
            httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.143 Safari/537.36");

            DateTime dateNow = DateTime.Now;
            string bodyMd5 = MD5Base64(body);
            string method = "POST";
            string accept = "application/json";
            string content_type = "application/json";
            string date = ToGMTstring(dateNow);

            //HttpContent httpContent = new StringContent(bodyMd5);
            //此处一定要用ByteArrayContent,用二进制数组发送数据组API。
            HttpContent httpContent = new ByteArrayContent(Encoding.UTF8.GetBytes(body));
            httpContent.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
            //设置Http的内容标头的字符
            //httpContent.Headers.ContentType.CharSet = "utf-8";
            httpClient.DefaultRequestHeaders.Date = dateNow;
            httpClient.DefaultRequestHeaders.Accept.Clear();
            httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(accept));
            string stringToSign = method + "\n" + accept + "\n" + bodyMd5 + "\n" + content_type + "\n" + date + "\n"
                   + "/face/attribute";
            // 2.计算 HMAC-SHA1
            string signature = HMACSha1(stringToSign, ak_secret);
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Dataplus", ak_id + ":" + signature);
            HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result;
            Console.WriteLine(response.StatusCode);
            result = response.Content.ReadAsStringAsync().Result;
            return result;
        }

引用的计算MD5和SHA的函数转换为C#如下:

public static string ToGMTstring(DateTime date)
        {
            return date.ToUniversalTime().ToString("r");
        }

        /// 计算MD5+BASE64
        public static string MD5Base64(string s)
        {
            if (s == null)
                return null;
            string encodeStr = "";
            byte[] utfBytes = System.Text.Encoding.UTF8.GetBytes(s);
            MD5 md5 = new MD5CryptoServiceProvider();
            try
            {
                byte[] md5Bytes = md5.ComputeHash(utfBytes);
                encodeStr = Convert.ToBase64String(md5Bytes);
            }
            catch (Exception e)
            {
                throw new Exception("Failed to generate MD5 : " + e.Message);
            }
            return encodeStr;
        }


        /// 计算 HMAC-SHA1
        public static string HMACSha1(string data, string key)
        {
            try
            {
                HMACSHA1 myHMACSHA1 = new HMACSHA1(Encoding.UTF8.GetBytes(key));
                byte[] byteText = myHMACSHA1.ComputeHash(Encoding.UTF8.GetBytes(data));
                return System.Convert.ToBase64String(byteText);
            }
            catch (Exception e)
            {
                throw new Exception("Failed to generate HMAC : " + e.Message);
            }
        }

很郁闷的就是调用不成功,取得的响应内容是
response body:The authorization(Dataplus my_ak_id:my_signature) of this request Invalid! {"url":"/face/attribute","headers":{"date":"Wed, 24 Oct 2018 05:50:10 GMT","accept":"application/json","authorization":"Dataplus my_ak_id:my_signature","content-type":"application/json"},"method":"POST"}
{"url":"/face/attribute","headers":{"date":"Wed, 24 Oct 2018 05:50:10 GMT","accept":"application/json","authorization":"Dataplus my_ak_id:my_signature","content-type":"application/json"},"method":"POST"}

其中输出已做替换my_ak_id:my_signature实际输出是我的ak_id和计算的签名。

在大佬在吗?指导一下。

目录
相关文章
|
10天前
|
自然语言处理 安全 API
API First:模型驱动的阿里云API保障体系
本文介绍了阿里云在API设计和管理方面的最佳实践。首先,通过API First和模型驱动的方式确保API的安全、稳定和效率。其次,分享了阿里云内部如何使用CloudSpec IDL语言及配套工具保障API质量,并实现自动化生成多语言SDK等工具。接着,描述了API从设计到上线的完整生命周期,包括规范校验、企业级能力接入、测试和发布等环节。最后,展望了未来,强调了持续提升API质量和开源CloudSpec IDL的重要性,以促进社区共建更好的API生态。
|
4天前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 12 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
28天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
1月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 11 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
3月前
|
存储 人工智能 自然语言处理
Elasticsearch Inference API增加对阿里云AI的支持
本文将介绍如何在 Elasticsearch 中设置和使用阿里云的文本生成、重排序、稀疏向量和稠密向量服务,提升搜索相关性。
143 14
Elasticsearch Inference API增加对阿里云AI的支持
|
2月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 云原生 API 网关 2024 年 10 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
|
2月前
|
弹性计算 负载均衡 监控
阿里云slb的slb-api介绍
【10月更文挑战第17天】
142 1
|
1天前
|
JSON 前端开发 搜索推荐
关于商品详情 API 接口 JSON 格式返回数据解析的示例
本文介绍商品详情API接口返回的JSON数据解析。最外层为`product`对象,包含商品基本信息(如id、name、price)、分类信息(category)、图片(images)、属性(attributes)、用户评价(reviews)、库存(stock)和卖家信息(seller)。每个字段详细描述了商品的不同方面,帮助开发者准确提取和展示数据。具体结构和字段含义需结合实际业务需求和API文档理解。
|
7天前
|
JSON API 数据格式
京东商品SKU价格接口(Jd.item_get)丨京东API接口指南
京东商品SKU价格接口(Jd.item_get)是京东开放平台提供的API,用于获取商品详细信息及价格。开发者需先注册账号、申请权限并获取密钥,随后通过HTTP请求调用API,传入商品ID等参数,返回JSON格式的商品信息,包括价格、原价等。接口支持GET/POST方式,适用于Python等语言的开发环境。
50 11
|
1月前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
80 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动

热门文章

最新文章