如何使用PostMan调用阿里云接口

简介: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果,此篇文章简单介绍下如何使用Postman调用阿里云人脸检测与五官定位接口

Step By Step

1.查看官方文档的请求参数

image.png

2.查看下公共请求参数确认完整请求内容

image.png
以下为完整请求内容:

http(s)://facebody.cn-shanghai.aliyuncs.com/?Action=DetectFace
&ImageURL=http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectFace/DetectFace1.png
&Landmark=true
&Quality=true
&Pose=true
&MaxFaceNumber=1
//以下为公共请求参数
&Signature=NAxwl1W9ROkidJfGeZrsKUXw%2BQ****
&AccessKeyId=testId
&Format=JSON
&RegionId=cn-shanghai
&SignatureMethod=HMAC-SHA1
&SignatureNonce=313ef0fb-0393-464f-a6e2-59d9ca2585b1
&SignatureVersion=1.0
&Timestamp=2019-10-12T08%3A18%3A18Z
&Version=2019-12-30

3.确认参数值

以下参数需要单独获取或计算:

以下三请求签名参数需手动计算后获取:请求签名

  • Signature
  • SignatureNonce
  • Timestamp

计算签名的代码:


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.net.URI;
import java.util.HashMap;
import java.util.Map;


public class SignDemo {
    static final String API_HTTP_METHOD = "POST";
    static final String API_VERSION = "2019-12-30";
    static final java.text.SimpleDateFormat DF = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
    public static void main(String[] args) throws Exception {
        String accessKeyId = "您的ak";
        String accessSecret = "您的sk";

        DF.setTimeZone(new java.util.SimpleTimeZone(0, "GMT"));// 这里一定要设置GMT时区
        Map<String, String> params = new HashMap<String,String>();//业务参数名字是大驼峰
        params.put("ImageURL", "http://viapi-test.oss-cn-shanghai.aliyuncs.com/viapi-3.0domepic/facebody/DetectFace/DetectFace1.png");
        String action = "DetectFace";
        execute(action, accessKeyId, accessSecret, params);
    }
    public static void execute(String action, String accessKeyId, String accessSecret, Map<String, String> bizParams) throws Exception {
        java.util.Map<String, String> paras = new java.util.HashMap<String, String>();
        // 1. 系统参数
        paras.put("SignatureMethod", "HMAC-SHA1");
        paras.put("SignatureNonce", java.util.UUID.randomUUID().toString());//防止重放攻击
        paras.put("AccessKeyId", accessKeyId);
        paras.put("SignatureVersion", "1.0");
        paras.put("Timestamp", DF.format(new java.util.Date()));
        paras.put("Format", "JSON");
        // 2. 业务API参数
        paras.put("Landmark","true");
        paras.put("Quality","true");
        paras.put("Pose","true");
        paras.put("MaxFaceNumber","1");
        paras.put("RegionId", "cn-shanghai");
        paras.put("Version", API_VERSION);
        paras.put("Action", action);
        if (bizParams != null && !bizParams.isEmpty()) {
            paras.putAll(bizParams);
        }
        // 3. 去除签名关键字Key
        if (paras.containsKey("Signature")) {
            paras.remove("Signature");
        }
        // 4. 参数KEY排序
        java.util.TreeMap<String, String> sortParas = new java.util.TreeMap<String, String>();
        sortParas.putAll(paras);
        // 5. 构造待签名的字符串
        java.util.Iterator<String> it = sortParas.keySet().iterator();
        StringBuilder sortQueryStringTmp = new StringBuilder();
        StringBuilder sortQueryStringTmp1 = new StringBuilder();
        while (it.hasNext()) {
            String key = it.next();
            sortQueryStringTmp.append("&").append(specialUrlEncode(key)).append("=").append(specialUrlEncode(paras.get(key)));
            sortQueryStringTmp1.append("&").append(key).append("=").append(paras.get(key));
        }
        String sortedQueryString = sortQueryStringTmp.substring(1);// 去除第一个多余的&符号
        StringBuilder stringToSign = new StringBuilder();
        stringToSign.append(API_HTTP_METHOD).append("&");
        stringToSign.append(specialUrlEncode("/")).append("&");
        stringToSign.append(specialUrlEncode(sortedQueryString));
        String sign = sign(accessSecret + "&", stringToSign.toString());
        // 6. 签名最后也要做特殊URL编码
        String signature = specialUrlEncode(sign);
        System.out.println("SignatureNonce:"+paras.get("SignatureNonce"));
        System.out.println("\r\n=========\r\n");
        System.out.println("Timestamp:"+paras.get("Timestamp"));
        System.out.println("\r\n=========\r\n");
        System.out.println("Signature:"+signature);
        System.out.println("\r\n=========\r\n");
        // 最终生成出合法请求的URL
        System.out.println("http://facebody.cn-shanghai.aliyuncs.com/?Signature=" + signature + sortQueryStringTmp);

        // 添加直接做post请求的方法
//        try {
//            // 使用生成的 URL 创建POST请求
//            URIBuilder builder = new URIBuilder("http://facebody.cn-shanghai.aliyuncs.com/?Signature=" + signature + sortQueryStringTmp);
//            URI uri = builder.build();
//            HttpPost request = new HttpPost(uri);
//            HttpClient httpclient = HttpClients.createDefault();
//            HttpResponse response = httpclient.execute(request);
//            HttpEntity entity = response.getEntity();
//            if (entity != null) {
//                System.out.println(EntityUtils.toString(entity));
//            }
//        } catch (Exception e) {
//            System.out.println(e.getMessage());
//        }
    }
    public static String specialUrlEncode(String value) throws Exception {
        return java.net.URLEncoder.encode(value, "UTF-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
    }
    public static String sign(String accessSecret, String stringToSign) throws Exception {
        javax.crypto.Mac mac = javax.crypto.Mac.getInstance("HmacSHA1");
        mac.init(new javax.crypto.spec.SecretKeySpec(accessSecret.getBytes("UTF-8"), "HmacSHA1"));
        byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
        return new sun.misc.BASE64Encoder().encode(signData);
    }
}

计算签名结果:
image.png

4.在Postman中创建一个post请求

image.png

5.send请求查看结果

image.png

目录
相关文章
|
3月前
|
JSON 数据格式 开发者
Postman模仿GET/POST请求进行接口的本地测试
接口是软件开发中常用的概念,是软件生产过程中比较核心的任务。对于接口开发者,调试接口是一件较为繁琐的事情,很多时候需要线上线下来回切换。在这里,我就跟大家介绍一个只需要在本地就可以调试接口的方法。
61 0
|
3月前
|
弹性计算 网络安全
阿里云OpenAPI提供了多种接口来管理ECS实例
【1月更文挑战第8天】【1月更文挑战第36篇】阿里云OpenAPI提供了多种接口来管理ECS实例
227 1
|
1月前
使用阿里云智能翻译接口案例—
使用阿里云智能翻译接口案例—
11 0
|
1月前
使用阿里云身份证扫描识别接口案例—
使用阿里云身份证扫描识别接口案例—
36 0
|
1月前
|
算法 Java 开发工具
使用阿里云KMS产品针对 Springboot 接口参数加密解密功能
针对Springboot里面使用开源工具使用加解密,替换成阿里云KMS产品进行加解密;
147 1
|
2月前
|
文字识别 安全 API
阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
【2月更文挑战第5天】阿里云文字识别OCR的发票凭证识别功能可以通过API接口的形式进行调用
88 5
|
2月前
|
弹性计算 网络安全
阿里云OpenAPI提供了多种接口来管理ECS实例
【2月更文挑战第1天】阿里云OpenAPI提供了多种接口来管理ECS实例
32 0
|
3月前
|
弹性计算 网络安全
阿里云OpenAPI提供了多种接口来管理ECS实例,包括创建、删除、重启等操作
【1月更文挑战第22天】【1月更文挑战第107篇】阿里云OpenAPI提供了多种接口来管理ECS实例,包括创建、删除、重启等操作
226 6
|
3月前
|
前端开发 API
【strapi系列】strapi在postman中如何调试public和认证用户Authorization的接口
【strapi系列】strapi在postman中如何调试public和认证用户Authorization的接口
30 1
|
3月前
|
API 开发工具
POSTMAN在测试调用钉钉待办事项接口时权限问题
POSTMAN在测试调用钉钉待办事项接口时权限问题

热门文章

最新文章