• 关于

    java里双引号

    的搜索结果

回答

nswcfd 2015.05.29 19:48已采纳命令参数含有引号,作为字符串本身传递给java又要加引号,需要考虑引号的逃逸。 或者从上到下说 Java exec本身的参数是一个字符串; 由于这个串本身不是命令,而是命令和参数的混合体,肯定通过bash -c "cmd"的形式传递给bash,这里又是一层引号;3.命令的某个参数(文件名)可能含有空格,所以从bash的角度,需要用引号把参数保护起来。 把引号去掉变ok,这是碰巧:如果文件名里含有空格(如果允许的话),那一样会报错。可以验证一下。原始命令的"应该是出于这个目的才存在的。 最简单的作法,由于bash既接受单引号也接受双引号来包含参数,把双引号换成单引号就可以了,这样就不需要"来保护了。当然其缺陷是filepath中不能包含单引号。 复杂点的作法,把"替换为\",增加一层逃逸(注意两边都要有)。但它同样有filepath不能有双引号的问题。
杨冬芳 2019-12-02 03:07:39 0 浏览量 回答数 0

回答

java拼sql串用双引号,sql语句里用单引号
吴孟桥 2019-12-02 02:47:34 0 浏览量 回答数 0

回答

你可以直接  export  ,但不要 用set  。  export JAVA_HOME= 。。。 在 source  就可以了 ######顶起######执行source 应该没问题######重启 source /etc/profile都试过,没用######你是root登录的?######试试把JAVA_HOME=/data/jdk1.7.0_10等变量用双引号引起来看看。: JAVA_HOME="/data/jdk1.7.0_10"######是命令行,无论是改/etc/profile还是 /root/.bashrc 重启后都不认识java命令######你是在命令行下登录的还是GUI?######双引号依然无效,只有一个root用户,没添加其它用户######打个命令Java,echo $JAVA_HOME, echo  $CLASSPATH,然后截个图出来看看。######回复 @softsword : 你看,根本就没有配置好。显示不出JAVA_HOME变量的内容呀。呵呵 。你把那段代码放在/etc/enviroment里。然后 source /etc/environment。再试试看。######.../////////###### ######认真检查,那个配置文件###### 引用来自“jack_xuwei”的答案 你可以直接  export  ,但不要 用set  。  export JAVA_HOME= 。。。 在 source  就可以了 解决了, ######psacct 用过么######没听过........
montos 2020-05-29 21:04:33 0 浏览量 回答数 0

阿里云高校特惠,助力学生创业梦!0元体验,快速入门云计算!

建个炫酷的简历网页,制作一个浪漫的表白网页,打造个人专属网盘,多种动手场景应用免费学!!!

回答

你可以直接  export  ,但不要 用set  。  export JAVA_HOME= 。。。 在 source  就可以了 ######顶起######执行source 应该没问题######重启 source /etc/profile都试过,没用######你是root登录的?######试试把JAVA_HOME=/data/jdk1.7.0_10等变量用双引号引起来看看。: JAVA_HOME="/data/jdk1.7.0_10"######是命令行,无论是改/etc/profile还是 /root/.bashrc 重启后都不认识java命令######你是在命令行下登录的还是GUI?######双引号依然无效,只有一个root用户,没添加其它用户######打个命令Java,echo $JAVA_HOME, echo  $CLASSPATH,然后截个图出来看看。######回复 @softsword : 你看,根本就没有配置好。显示不出JAVA_HOME变量的内容呀。呵呵 。你把那段代码放在/etc/enviroment里。然后 source /etc/environment。再试试看。######.../////////###### ######认真检查,那个配置文件###### 引用来自“jack_xuwei”的答案 你可以直接  export  ,但不要 用set  。  export JAVA_HOME= 。。。 在 source  就可以了 解决了, ######psacct 用过么######没听过........
kun坤 2020-06-05 23:02:57 0 浏览量 回答数 0

问题

MaxCompute工具及下载:MaxCompute Studio:开发 Java 程序:开发和调试 UDF

创建完成 MaxCompute Java Module 后,即可开发 UDF。 操作步骤 展开已创建的 MaxCompute Java Module 目录,导航至 src -> new࿰...
行者武松 2019-12-01 22:06:25 1430 浏览量 回答数 0

问题

like '%"+name+"%'怎么理解

关于 JAVA 框架-Hibernate-查询-标准sql -使用标准SQL,根据name进行模糊查询 的提问 like '%"+name+"%' 这里面的单引号双引号要怎么理解呢...
YDYK 2021-01-25 15:02:48 0 浏览量 回答数 1

回答

<pre><code>te.sd("11");</code></pre> 改成双引号   按照您的要求改了还是有问题....麻烦在给看看其他地方有没有问题? 对。改成:String a = te.sd("11"); 11 是个字符串,必须用双引号括起来。 <p>JAVA 语言要求:</p> 字符型变量,其数值用单引号括起来,如 char c = 'a'; 字符串数值用双引号括起来,如  String  s= "11"; 你定义的类 test 中的成员方法 public String sd(Srting s) {...} 要求的参数是 字符串,那么调用它的时候,参数必须是字符串,即必须是用双引号括起来的字符串,写成 :   String a = te.sd("11");   已经按照您的要求修改了...但是还是有错误,已经把错误提示贴出来了,您在看看 <p>这样的操作本身就是错的,</p> 亲,能指指正下错误吗? 感激不尽 重新编译下test类 并部署 <p>你JSP头文件呢,像这样的<%@ page language="java" contentType="text/html; charset=ISO-8859-1"<br>     pageEncoding="ISO-8859-1"%>。JSP也是servlet 你导入相应jar包没? <p>你是不是在com的包中还有一个test类,而且里面有个没有参数的sd()方法,或者你重新编译下。</p> <p>请问解决了吗,急需你的解决方案</p>  
爱吃鱼的程序员 2020-06-06 21:25:57 0 浏览量 回答数 0

问题

java用命令调用bat批处理的问题

Runtime.getRuntime().exec(cmd /k start bat文件路径);里面的路径有空格怎么办,加上双引号不可以的,有什么办法?...
蛮大人123 2019-12-01 19:56:25 997 浏览量 回答数 1

回答

Java在jdk5开始就自带有Jconsole了,要想用Jconsol监控且需要添加启动参数:Linux系统:`JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=8950 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"` Windows系统也类似,去掉双引号,将环境变量符 号$JAVA_OPTS 变成现在%JAVA_OPTS %即可。 这样就能在本机使用Jconsole监控了:jconsole localhost:8950。 要实现远程监控还要与IP绑定,添加参数: -Djava.rmi.server.hostname=192.168.10.31 若要实现使用用户名登陆,修改参数-Dcom.sun.management.jmxremote.authenticate=true;添加启动参数:-Dcom.sun.management.jmxremote.password.file=$JAVA_HOME/jre/lib /management/jmxremote.password ;然后进行以下配置: 把 JRE_HOME/lib/management/jmxremote.password.template拷贝为 jmxremote.password。 去掉此目录下 jmxremote.access 最后两行的注释,这个存的就是用户名和权限。 对应的,去掉 jmxremote.password 最后两行注释,这个是用户名和对应的密码。 通过添加和修改这两个文件来管理登陆用户。 最后,要修改jmxremote.password文件的权限chkmod 600 jmxremote.password。 就可以在Jconsole里实现远程监控了: 远程进程 192.168.10.31:8950 或 service:jmx:rmi:///jndi/rmi://192.168.10.31:8950/jmxrmi
落地花开啦 2019-12-02 02:18:16 0 浏览量 回答数 0

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

阿里极客公益活动: 或许你挑灯夜战只为一道难题 或许你百思不解只求一个答案 或许你绞尽脑汁只因一种未知 那么他们来了,阿里系技术专家来云栖问答为你解答技术难题了 他们用户自己手中的技术来帮助用户成长 本次活动特邀百位阿里技术专家对Java常...
管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

回答

我主攻游戏后端,游戏中Excel数值配置表我都是转换为JavaBean使用的,数值配置表转javabean已有固定框架,不依赖spring系列。如有需要可以看看我的开源项目 kaka######答案还是给你把,excel毕竟是表格,而且是二进制文件吧,不同excel软件厂商的excel文件内部结构不一致,我比较担心的是用wps的excel编辑,到了微软的excel打开,再读取会不会抛出异常问题, 最后还是自己花了几个小时学习反射设置类属性知识,搭建了一个基于toml格式的配置文件的反射Bean配置工具类。######回复 @齿轮1 : 子对象需要配合注解注明转换器,将String转换为对象,比如 一个单元格里面配置多个道具,格式为:1001 #10;1002#5;1003 #8,“#”前面表示道具ID后面为道具数量,JavaBean注解中只要配置转化器将 1001#10 这种转换为子对象就可以,kaka框架中特别适合做数值配置解析,可能不适合你的情况。######子对象转换怎么办?这个若可以的话,那怎么在excel里表示子对象?,把子对象信息写在一个单元格里?###### 可以实现的,使用字节码加载机制,有现成的开源框架帮你,装载配置类###### java没有xml的库吗?.net有现成的###### xStream  xml转Java的bean对象###### 不喜欢xml,那么可以直接使用json。读取json文件,然后用json反序列化为类即可。十行代码就搞定了。######回复 @齿轮1 : 肯定行啊。######回复 @齿轮1 : 注释和运行时,有啥关系?######还有注释######json换行不行###### 引用来自“RippleChan”的评论 不喜欢xml,那么可以直接使用json。读取json文件,然后用json反序列化为类即可。十行代码就搞定了。 @RippleChan    如果Json要真的做配置文件,那得能配置多行字符串属性,还有单行注释和多行注释,key不能写双引号。比如下面这个   { info:" 这是一个换行的字符串 这是一个换行的字符串 " #单行注释 /# 多行注释 #/ asd:"", } 读取这种json格式的有现成框架么?######回复 @RippleChan : 但是无论如何,把文本弄成一行一行的,就变成传统字符串了。。最后拼接起来完事。######另外,json没有双引号,各种非主流。。图个啥。######注释很简单啊,你把每行读取到list<String>中,然后循环,如果以/#开头的话,就直接替换掉。如果是/#开头的话,那么就boolean isComment= true。遇到#/的后,isComment=false就好了。处理完成后,就是通用的json格式了。
kun坤 2020-06-07 13:48:27 0 浏览量 回答数 0

问题

【阿里云产品公测】简单日志服务SLS使用评测含教程

评测介绍 被测产品: 简单日志服务SLS评测环境: 阿里云基础ECS x2(1核, 512M, 1M)操作系统: CentOS 6.5 x64日志环境: Nginx(v1.6.2) HTTP服务器访问日志评测人: mr_wid评测时间...
mr_wid 2019-12-01 21:08:11 36639 浏览量 回答数 20

问题

基础语言百问-Python

基础语言百问-Python 软件界最近非常流行一句话“人生苦短,快用Python”,这就展示出了Python的特点,那就是快,当然这个快并不是指的Python运行快,毕竟是脚本语言,再怎样也快不过C语言和C++这样的底层语言,这里的快指的是...
薯条酱 2019-12-01 20:12:27 56807 浏览量 回答数 30

回答

######按你这个方法 最后改进 解决了######您的写法 取的时候 http://www.tudou.com/v/D76aUX1gCVA/v.swf" 后面还有一个双引号没有过滤掉 还有 就是能不能同时把图片过滤掉<img src="/upfiles/photo/141/20110622103328_11337.jpg" alt="" />这样的 。。。谢谢了######[a-zA-z]+://[^\s]* http://www.ostools.net/regex# 这里面有。获取网页url 不过获取出来的多了个"号. 改成这样写  [a-zA-z]+://[^\s"]*  不知道是否匹配正确。######不行啊 谢谢 了###### /(?:(?<=src=["']))[^"']+.(swf|flv)/ 我这个用了一些特性  ostools 那里不支持, 但是 php 能支持 <?php $str = '<embed src="http://www.tudou.com/v/D76aUX1gCVA/v.swf" type="application/x-shockwave-flash" width="550" height="400" quality="high" />'; preg_match('/(?:(?<=src=["\']))[^"\']+\.(swf|flv)/', $str, $arr); echo $arr[0]; ######谢谢了 这个 那天就已经解决了######回复 @小luo爱学习 : ostools 不支持这种写法 (?:(?<=src=["']))######回复 @ahkxhyl : 你可以在线测试一下,完全可以啊。按照你的提问,你要获取的是一个url。######回复 @ahkxhyl : 改了一下, 不过我觉得你应该自己读一下代码######您写的这个可以 但是我的数据库字段里面还有图片 按您的写法图片也被筛选出来了######php从未玩过的路过###### 专扒土豆网的吗?我给你一个简单入门级的正则式匹配swf和flv:<PHP我不会,但是Java的话是如下,希望可以帮到你> "http://www\\.tudou\\.com/(?i:)(/|\\w)+.(swf|flv)" OSChina正则表达式测试工具测试通过的是如下: (上面的是针对Java,下面的是针对OSC测试工具http://www.ostools.net/regex# ): http://www\.tudou\.com/(/|\w)+\.(swf|flv) ######谢谢热心的人 祝你天天开心######/http:.*?\.swf/i 直接取以swf结尾的链接###### / <embed.*?src=[\'"]?([^"\']+)[\'"]?.*?\/> /i######这个 是取得以<embed></embed>的内容吧 我前天已经解决了 谢谢了
爱吃鱼的程序员 2020-06-03 20:46:16 0 浏览量 回答数 0

回答

示例一:参数拼接法 示例二:编程语言法 对于每一次 HTTP 或者 HTTPS 协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体使用 AccessKey 的 AccessKeyId 和 AccessKeySecret 对称加密验证实现。 您的用户名/密码是用于登录消息队列 Kafka 版控制台的身份凭据,与此类似,AccessKey 是用于调用 API 的身份凭据。AccessKey 中的 AccessKeyId 是访问者身份,AccessKeySecret 是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。 说明 消息队列 Kafka 版提供了多种编程语言的 SDK,可以免去您签名的烦恼。更多详情,请下载 SDK。 步骤一:构造规范化请求字符串 排序参数。排序规则以首字母顺序排序,排序参数包括公共请求参数和接口自定义参数,不包括公共请求参数中的 Signature 参数。 编码参数。使用 UTF-8 字符集按照 RFC3986 规则编码请求参数和参数取值,编码规则如下: 字符 A~Z、a~z、0~9 以及字符 ”-“、“_”、“.”、“~” 不编码。 其它字符编码成 %XY 的格式,其中 XY 是字符对应 ASCII 码的 16 进制。示例:半角双引号(")对应 %22。 扩展的 UTF-8 字符,编码成 %XY%ZA… 的格式。 空格( )编码成 %20,而不是加号(+)。 该编码方式与 application/x-www-form-urlencoded MIME 格式编码算法相似,但又有所不同。 如果您使用的是 Java 标准库中的 java.net.URLEncoder,可以先用标准库中 percentEncode 编码,随后将编码后的字符中加号(+)替换为 %20、星号(*)替换为 %2A、%7E 替换为波浪号(~),即可得到上述规则描述的编码字符串。示例如下: private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与步骤 1 一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循请求结构。 步骤二:构造签名字符串 构造待签名字符串 StringToSign。您可以同样使用 percentEncode 处理上一步构造的规范化请求字符串,规则如下: StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的 HTTP 方法,例如 POST。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即 %2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照 RFC2104 的定义,计算待签名字符串 StringToSign 的 HMAC-SHA1 值。示例使用的是 Java Base64 编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 说明 计算签名时,RFC2104 规定的 Key 值是您的 AccessKeySecret 并加上与号(&),其 ASCII 值为 38。 添加根据 RFC3986 规则编码后的参数 Signature 到规范化请求字符串URL中。 示例一:参数拼接法 以调用 GetInstanceList 获取实例列表为例。假设您获得了 AccessKeyID=testid 以及 AccessKeySecret=testsecret,签名流程如下所示: 构造规范化请求字符串。 http://alikafka.%s.aliyuncs.com/?Timestamp=2016-02-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=GetInstanceList&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&SignatureVersion=1.0 构造待签名字符串 StringToSign。 POST&%2F&AccessKeyId%3Dtestid&Action%3DGetInstanceList&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&Timestamp%3D2016-02-23T12%253A46%253A24Z&Version%3D2014-05-26 计算签名值。因为 AccessKeySecret=testsecret,用于计算的 Key 为 testsecret&,计算得到的签名值为 OLeaidS1JvxuMvnyHOwuJ+uX5qY=。示例使用的是 Java Base64 编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加 RFC3986 规则编码后的 Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D 到步骤 1 的 URL 中。 http://alikafka.%s.aliyuncs.com/?SignatureVersion=1.0&Action=GetInstanceList&Format=JSON&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 通过以上 URL,您可以使用浏览器、curl 或者 wget 等工具发起 HTTP 请求调用 GetInstanceList,查询指定地域的实例信息。 示例二:编程语言法 依然以调用 GetInstanceList 获取实例列表为例。假设您获得了 AccessKeyID=testid 以及 AccessKeySecret=testsecret,并且假定所有请求参数放在一个 Java Map<String, String> 对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式 Timestamp。参数 Timestamp 必须符合 ISO8601 规范,并需要使用 UTC 时间,时区为 +0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "POST"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "GetInstanceList"); parameters.put("Version", "2014-05-26"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "JSON"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为 AccessKeySecret=testsecret,所以用于计算 HMAC 的 Key 为 testsecret&,计算得到的签名值为 OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData));
保持可爱mmm 2020-03-28 17:57:59 0 浏览量 回答数 0

回答

对于每一次HTTP或者HTTPS协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体由使用AccessKeyID和AccessKeySecret对称加密验证实现。 AccessKey相当于用户密码,AccessKey用于调用API,而用户密码用于登录 智能视觉控制台 。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。 说明 我们提供了多种编程语言的SDK及第三方SDK,可以免去您签名的烦恼。更多详情,请下载 SDK。 步骤 1. 构造规范化请求字符串 排序参数。排序规则以首字母顺序排序,排序参数包括 公共请求参数 和接口自定义参数,不包括公共请求参数中的 Signature 参数。 说明 当使用GET方法提交请求时,这些参数就是请求URL中的参数部分,即URL中 ? 之后由 & 连接的部分。 编码参数。使用UTF-8字符集按照 RFC3986 规则编码请求参数和参数取值,编码规则如下: 字符A~Z、a~z、0~9以及字符 -、_、.、~ 不编码。 其它字符编码成 %XY 的格式,其中 XY 是字符对应ASCII码的16进制。示例:半角双引号(")对应 %22。 扩展的UTF-8字符,编码成 %XY%ZA… 的格式。 空格( )编码成 %20,而不是加号(+)。 该编码方式与 application/x-www-form-urlencoded MIME格式编码算法相似,但又有所不同。 如果您使用的是Java标准库中的 java.net.URLEncoder,可以先用标准库中 percentEncode 编码,随后将编码后的字符中加号(+)替换为 %20、星号(*)替换为 %2A、%7E 替换为波浪号(~),即可得到上述规则描述的编码字符串。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与 步骤1 一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循 请求结构。 步骤 2. 构造签名字符串 构造待签名字符串 StringToSign。您可以同样使用 percentEncode 处理上一步构造的规范化请求字符串,规则如下: StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的 HTTP 方法,例如 GET。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即 %2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照 RFC2104 的定义,计算待签名字符串 StringToSign 的HMAC-SHA1值。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 说明 计算签名时,RFC2104规定的Key值是您的 AccessKeySecret 并加上与号( &),其ASCII值为38。 添加根据RFC3986 规则编码后的参数 Signature 到规范化请求字符串URL中。 示例 1. 参数拼接法 以调用 SearchProject 搜索项目为例。假设您获得了 AccessKeyID=testid 以及 AccessKeySecret=testsecret,签名流程如下所示: 构造规范化请求字符串。 http://ivision.cn-beijing.aliyuncs.com/?Timestamp=2016-02-23T12:46:24Z&Format=XML&AccessKeyId=testid&Action=SearchProject&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2018-08-20&SignatureVersion=1.0 构造待签名字符串 StringToSign。 GET&%2F&AccessKeyId%3Dtestid&Action%3DSearchProject&Format%3DXML&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion%3D1.0&Timestamp%3D2016-02-23T12%253A46%253A24Z&Version%3D2018-08-20 计算签名值。因为 AccessKeySecret=testsecret,用于计算的Key为 testsecret&,计算得到的签名值为 hM2rA9z4hO9rtg7SfHEYeAeYXkg=。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加 RFC3986 规则编码后的Signature=hM2rA9z4hO9rtg7SfHEYeAeYXkg%3D 到 步骤1 的URL中。 http://ivision.cn-beijing.aliyuncs.com/?Signature=hM2rA9z4hO9rtg7SfHEYeAeYXkg%3D&SignatureVersion=1.0&Action=SearchProject&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2018-08-20&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 通过以上URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用 SearchProject,查看项目列表。 示例 2. 编程语言法 依然以调用 SearchProject 搜索项目为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,并且假定所有请求参数放在一个Java Map<String, String> 对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式 Timestamp。参数 Timestamp 必须符合 ISO8601 规范,并需要使用UTC时间,时区为+0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "GET"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "SearchProject"); parameters.put("Version", "2018-08-20"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "XML"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为 AccessKeySecret=testsecret,所以用于计算HMAC的Key为 testsecret&,计算得到的签名值为 hM2rA9z4hO9rtg7SfHEYeAeYXkg%3D。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,按照 RFC3986 规则编码后的URL如下所示: http://ivision.cn-beijing.aliyuncs.com/?Signature=hM2rA9z4hO9rtg7SfHEYeAeYXkg%3D&SignatureVersion=1.0&Action=SearchProject&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2018-08-20&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 通过以上URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用 SearchProject,查看项目列表。
保持可爱mmm 2020-03-29 16:39:05 0 浏览量 回答数 0

问题

程序员报错QA大分享(1)

程序员报错QA征集第一弹来了哦~包含QA分享一期征集的部分内容,链接附带解决方案,可收藏哦~ npm install安装依赖一直报错?报错https://developer.aliyun.com/ask/301...
问问小秘 2020-06-18 15:46:14 1684 浏览量 回答数 2

回答

为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。 说明 AccessKey相当于用户密码,AccessKey用于调用API,而用户密码用于登录ROS控制台。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。更多详情,请参见创建AccessKey。 资源编排ROS提供了多种编程语言的SDK及第三方SDK,可以免去您签名的烦恼。更多详情,请下载SDK。 步骤一:构造规范化请求字符串 排序参数。排序规则以首字母顺序排序,排序参数包括公共参数和接口自定义参数,不包括公共请求参数中的Signature参数。 说明 当使用GET方法提交请求时,这些参数就是请求URL中的参数部分,即URL中?之后由&连接的部分。 编码参数。使用UTF-8字符集按照RFC3986规则编码请求参数和参数取值,编码规则如下: 字符A~Z、a~z、0~9以及字符-、_、.、~不编码。 其它字符编码成%XY的格式,其中XY是字符对应ASCII码的16进制。例如,半角双引号(")对应%22。 扩展的UTF-8字符,编码成%XY%ZA…的格式。 空格( )编码成%20,而不是加号(+)。 该编码方式与application/x-www-form-urlencodedMIME格式编码算法相似,但又有所不同。 如果您使用的是Java标准库中的java.net.URLEncoder,可以先用标准库中percentEncode编码,随后将编码后的字符中加号(+)替换为%20、星号(*)替换为%2A、%7E替换为波浪号(~),即可得到上述规则描述的编码字符串。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与步骤1一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循请求语法。 步骤二:构造签名字符串 构造待签名字符串StringToSign。您可以同样使用percentEncode处理上一步构造的规范化请求字符串,规则如下。 StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的HTTP方法,例如GET。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即%2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照RFC2104的定义,计算待签名字符串StringToSign的HMAC-SHA1值。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 说明 计算签名时,RFC2104规定的Key值是您的AccessKeySecret并加上与号(&),其ASCII值为38。更多详情,请参见创建AccessKey。 添加根据RFC3986规则编码后的参数Signature到规范化请求字符串URL中。 示例一:参数拼接法 以调用DescribeRegions查询地域为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,签名流程如下所示: 构造规范化请求字符串。 http://ros.aliyuncs.com/?Timestamp=2019-08-23T12%3A46%3A24Z&Format=XML&AccessKeyId=testid&Action=DescribeRegions&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2019-09-10&SignatureVersion=1.0 构造待签名字符串 。 GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeRegions%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf%26SignatureVersion%3D1.0%26Timestamp%3D2019-08-23T12%253A46%253A24Z%26Version%3D2019-09-10 计算签名值。因为AccessKeySecret=testsecret,用于计算的Key为testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ+uX5qY=。示例使用的是JavaBase64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加RFC3986规则编码后的Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D到步骤1的URL中。 http://ros.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2019-09-10&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2019-08-23T12%253A46%253A24Z 通过以上URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用DescribeRegions,查看阿里云的地域列表。 示例二:编程语言法 依然以调用DescribeRegions查询地域为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,并且假定所有请求参数放在一个Java Map<String, String>对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式Timestamp。参数Timestamp时间格式必须采用ISO 8601格式规范,并需要使用UTC时间,时区为+0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "GET"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "DescribeRegions"); parameters.put("Version", "2019-09-10"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "XML"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为AccessKeySecret=testsecret,所以用于计算HMAC的Key为testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,按照RFC3986规则编码后的URL如下所示。 http://ros.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeRegions&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2019-09-10&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2019-08-23T12%253A46%253A24Z 使用浏览器、curl或者wget等工具发送HTTP请求。 cn-qingdao ros.aliyuncs.com 华北 1 cn-beijing ros.aliyuncs.com 华北 2 cn-zhangjiakou ros.aliyuncs.com 华北 3 cn-huhehaote ros.aliyuncs.com 华北 5 cn-hangzhou ros.aliyuncs.com 华东 1 cn-shanghai ros.aliyuncs.com 华东 2 cn-shenzhen ros.aliyuncs.com 华南 1 cn-chengdu ros.aliyuncs.com 西南1(成都) cn-hongkong ros.aliyuncs.com 香港 ap-northeast-1 ros.aliyuncs.com 亚太东北 1 (东京) ap-southeast-1 ros.aliyuncs.com 亚太东南 1 (新加坡) ap-southeast-2 ros.aliyuncs.com 亚太东南 2 (悉尼) ap-southeast-3 ros.aliyuncs.com 亚太东南 3 (吉隆坡) ap-southeast-5 ros.aliyuncs.com 亚太东南 5 (雅加达) ap-south-1 ros.aliyuncs.com 亚太南部 1 (孟买) us-east-1 ros.aliyuncs.com 美国东部 1 (弗吉尼亚) us-west-1 ros.aliyuncs.com 美国西部 1 (硅谷) eu-west-1 ros.aliyuncs.com 英国 (伦敦) me-east-1 ros.aliyuncs.com 中东东部 1 (迪拜) eu-central-1 ros.aliyuncs.com 欧洲中部 1 (法兰克福) 59F0F0A0-A637-4292-9B91-251EF5010913 返回结果列举了地域和地域ID列表。如果您在提交请求时,指定参数Format=JSON,那么返回结果的格式为JSON格式而不是XML格式。
1934890530796658 2020-03-24 18:33:54 0 浏览量 回答数 0

回答

通信协议 支持HTTP/HTTPS协议。 请求方法 所有接口都支持POST/GET方法。 字符编码 所有接口的请求参数和返回结果编码方式都是UTF-8。 API请求结构 类型 描述 备注 API接入地址 具体API接口地址。 示例:http(https)://green.cn-shanghai.aliyuncs.com 公共参数 每个接口都包含有的通用参数。 详见公共参数说明。 接口自定义参数 每个接口特有的参数。 详见每个API接口定义。 API接入地址 内容检测API配置管理服务(自定义图库、自定义文本库和OSS检测内容管理)的接入地址为: http(s)://green.cn-shanghai.aliyuncs.com 注意 只支持以上地址。中国所有地域都请使用以上地址来调用服务,我们会自动同步到每个地域。 公共参数 名称 类型 是否必需 描述 Action String 是 要执行的操作,即API接口名称。具体取值请参见 API概览。 AccessKeyId String 是 访问密钥 ID。AccessKey用于调用 API。 Signature String 是 您的签名。具体取值请参见签名机制。 SignatureMethod String 是 签名方式。取值:HMAC-SHA1。 SignatureVersion String 是 签名算法版本。取值:1.0。 SignatureNonce String 是 签名唯一随机数。用于防止网络重放攻击,建议您每一次请求都使用不同的随机数。 Timestamp String 是 请求的时间戳。按照ISO8601标准表示,并需要使用UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ。示例:2018-01-01T12:00:00Z,表示北京时间2018年01月01日20点00分00秒。 Version String 是 API的版本号,格式为YYYY-MM-DD。取值:2017-08-23。 Format String 否 返回参数的语言类型。取值范围: json xml(默认) 接口自定义参数 请在API 概览中,单击每个API进行查阅。 签名机制 对于每一次HTTP或者HTTPS协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体由使用AccessKeyID和AccessKeySecret对称加密验证实现。 AccessKey相当于用户密码,AccessKey用于调用API,而用户密码用于登录阿里云控制台 。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。 构造规范化请求字符串。 排序参数。排序规则以首字母顺序排序,排序参数包括公共参数和接口自定义参数,不包括公共请求参数中的Signature参数。 说明 当使用GET方法提交请求时,这些参数就是请求URL中的参数部分,即URL中?之后由&连接的部分。 编码参数。使用UTF-8字符集按照RFC3986规则编码请求参数和参数取值,编码规则如下: 字符A~Z、a~z、0~9以及字符-、_、.、~不编码。 其它字符编码成%XY的格式;其中XY是字符对应ASCII码的16进制。示例:半角双引号(")对应 %22。 扩展的UTF-8字符,编码成%XY%ZA…的格式。 空格( )编码成%20,而不是加号(+)。 该编码方式与application/x-www-form-urlencodedMIME格式编码算法相似,但又有所不同。 如果您使用的是Java标准库中的java.net.URLEncoder,可以先用标准库中percentEncode编码,随后将编码后的字符中加号(+)替换为 %20、星号(*)替换为 %2A、%7E 替换为波浪号(~),即可得到上述规则描述的编码字符串。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与步骤ⅰ一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循API请求结构。 构造签名字符串。 构造待签名字符串StringToSign。您可以同样使用percentEncode处理上一步构造的规范化请求字符串,规则如下: StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的 HTTP 方法,例如 GET。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即 %2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照RFC2104 的定义,计算待签名字符串StringToSign的HMAC-SHA1值。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 说明 计算签名时,RFC2104规定的Key值是您的AccessKeySecret并加上与号(&),其ASCII值为38。 添加根据RFC3986规则编码后的参数Signature到规范化请求字符串URL中。 代码示例 示例一:参数拼接法 以调用DescribeKeywordLib查询词库为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,签名流程如下所示: 构造规范化请求字符串。 AccessKeyId=testid&Action=DescribeKeywordLib&Format=XML&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&SignatureVersion=1.0&Timestamp=2016-02-23T12:46:24Z&Version=2014-05-26&ServiceModule=open_api 构造待签名字符串StringToSign。 GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeKeywordLib%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf%26SignatureVersion%3D1.0%26Timestamp%3D2016-02-23T12%253A46%253A24Z%26Version%3D2014-05-26%26ServiceModule%3Dopen_api 计算签名值。因为AccessKeySecret=testsecret,用于计算的Key为 testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ+uX5qY=。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加RFC3986规则编码后的Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D到步骤ⅰ的URL中。 http://green.cn-shanghai.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeKeywordLib&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z&ServiceModule=open_api 通过以上URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用DescribeKeywordLib,查看自定义关键词库列表。 示例二:编程语言法 依然以调用DescribeKeywordLib查询词库为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,并且假定所有请求参数放在一个JavaMap<String, String>对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式Timestamp。参数Timestamp必须符合ISO8601规范,并需要使用UTC时间,时区为+0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "GET"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "DescribeKeywordLib"); parameters.put("Version", "2017-08-23"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "XML"); parameters.put("ServiceModule", "open_api"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为 AccessKeySecret=testsecret,所以用于计算HMAC的Key为testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,按照RFC3986规则编码后的URL如下所示: http://green.cn-shanghai.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeKeywordLib&Format=XML&SignatureNonce=3ee8c1b8-83d3-44af-a94f-4e0ad82fd6cf&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 使用浏览器、curl或者wget等工具发送HTTP请求,获取返回结果。 API返回结果 请在API概览中单击每个API进行查阅。
保持可爱mmm 2020-03-27 19:04:14 0 浏览量 回答数 0

回答

为保证API的安全使用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。本文介绍计算签名的方法和示例。 步骤一:构造规范化请求字符串 排序参数。按照参数首字母的字典顺序对参数排序,排序参数包括公共请求参数和接口自定义参数,不包括公共请求参数中的Signature参数。 公共请求参数详情,请参见公共请求参数。 说明 当使用GET方法提交请求时,这些参数就是URL请求中的参数部分,即URL中?之后由&连接的部分。 编码参数。使用UTF-8字符集按照RFC3986规则编码请求参数和参数取值,编码规则如下: 字符A~Z、a~z、0~9以及字符-、_、.、~不编码。 其它字符编码成%XY的格式,其中XY是字符对应ASCII码的16进制。示例:半角双引号(")对应%22。 扩展的UTF-8字符,编码成%XY%ZA…的格式。 空格编码成%20,而不是加号(+)。 该编码方式与application/x-www-form-urlencodedMIME格式编码算法相似,但又有所不同。 如果您使用的是Java标准库中的java.net.URLEncoder,可以先用标准库中的percentEncode编码,然后将已编码字符中的加号(+)替换为%20、星号(*)替换为%2A、%7E替换为波浪号(~),即可得到上述规则描述的编码字符串。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与第1步一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循请求结构。 步骤二:构造签名字符串 构造待签名字符串StringToSign。您可以同样使用percentEncode处理上一步构造出的规范化请求字符串,规则如下: StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的 HTTP 方法,例如 GET。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即 %2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照RFC2104的定义,计算待签名字符串StringToSign的HMAC-SHA1值。本示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 说明 计算签名时,RFC2104规定的Key值是您的AccessKeySecret并加上与号(&),其ASCII值为38。更多详情,请参见创建AccessKey。 将RFC3986规则编码后的参数Signature添加到规范化请求字符串URL中。 示例一:参数拼接法 本示例以调用DescribeDedicatedHosts查询一台或多台专有宿主机的详细信息为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,签名流程如下: 构造规范化请求字符串。 http://ecs.aliyuncs.com/?Timestamp=2016-02-23T12%3A46%3A24Z&Format=XML&AccessKeyId=testid&Action=DescribeDedicatedHosts&SignatureMethod=HMAC-SHA1&SignatureNonce=3ee8c1b8-xxxx-xxxx-xxxx-xxxxxxxxxx&Version=2014-05-26&SignatureVersion=1.0 构造待签名字符串StringToSign。 GET&%2F&AccessKeyId%3Dtestid%26Action%3DDescribeDedicatedHosts%26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3D3ee8c1b8-xxxx-xxxx-xxxx-xxxxxxxxx%26SignatureVersion%3D1.0%26Timestamp%3D2016-02-23T12%253A46%253A24Z%26Version%3D2014-05-26 计算签名值。因为AccessKeySecret=testsecret,用于计算的Key为testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ+uX5qY=。本示例使用的是JavaBase64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加RFC3986规则编码后的Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D到第1步的URL中。 http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeDedicatedHosts&Format=XML&SignatureNonce=3ee8c1b8-xxxx-xxxx-xxxx-xxxxxxxxx&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 通过第4步得到的URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用DescribeDedicatedHosts,查询一台或多台专有宿主机的详细信息。 示例二:编程语言法 本示例以调用DescribeDedicatedHosts为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,并且假定所有请求参数放在一个JavaMap<String, String>对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式Timestamp。参数Timestamp必须符合ISO8601规范,并需要使用UTC时间,时区为+0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "GET"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "DescribeDedicatedHosts"); parameters.put("Version", "2014-05-26"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "XML"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为AccessKeySecret=testsecret,所以用于计算HMAC的Key为testsecret&,计算得到的签名值为OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,按照RFC3986规则编码后的URL如下: http://ecs.aliyuncs.com/?SignatureVersion=1.0&Action=DescribeDedicatedHosts&Format=XML&SignatureNonce=3ee8c1b8-xxxx-xxxx-xxxxx-xxxxx&Version=2014-05-26&AccessKeyId=testid&Signature=OLeaidS1JvxuMvnyHOwuJ%2BuX5qY%3D&SignatureMethod=HMAC-SHA1&Timestamp=2016-02-23T12%253A46%253A24Z 使用浏览器、curl或者wget等工具发送HTTP请求。 返回结果默认为XML格式,如下所示。提交请求时,若指定参数Format=JSON,则返回结果为JSON格式。更多详情,请参见返回结果。 1 dh-2xxxxxxxxxxxxx PostPaid ecs.se1ne 32 cn-beijing-c 2018-08-13T07:59Z 2 Available ddh.se1ne cn-beijing myDDH 56 448.0 56 0 0 448.0 d7xxxxxxxxxxxxxxxxxdb 2999-09-08T16:00Z dh-2xxxxxxxxxxxxx PostPaid ecs.se1ne 32 cn-beijing-c 2018-08-13T07:59Z 2 Available ddh.se1ne cn-beijing myDDH 56 448.0 56 0 0 448.0 fxxxxxxxxxxxxxxx6ca6 2999-09-08T16:00Z 2 10 C9E9EA51-6B74-409E-BA40-107126A200D4
1934890530796658 2020-03-30 13:28:08 0 浏览量 回答数 0

回答

本文适用基于API URL发起HTTP/HTTPS GET请求的用户,如果您使用的是SDK可以跳过此环节。 发起API请求的URL由不同参数拼凑而成,有固定的请求结构。URL中包含公共参数、您的签名机制和某个API的具体参数。每篇API文档均给出了URL请求示例供您参考,但是为了方便显示,我们并没有编码这些URL示例,您需要在发起请求前自行编码。我们根据您的签名验证了请求后,会返回结果。接口调用成功会显示返回参数,调用失败则显示相应报错,您可以根据公共错误码和具体API错误码分析排查。 公共参数分为公共请求参数和公共返回参数。 公共请求参数 名称 类型 是否必需 描述 Action String 是 API的名称。取值参见API概览。 AccessKeyId String 是 访问密钥ID。AccessKey用于调用API,而用户密码用于登录OOS 管理控制台 Signature String 是 您的签名。取值参见签名机制。 SignatureMethod String 是 签名方式。取值范围:HMAC-SHA1。 SignatureVersion String 是 签名算法版本。取值范围:1.0。 SignatureNonce String 是 签名唯一随机数。用于防止网络重放攻击,建议您每一次请求都使用不同的随机数。 Timestamp String 是 请求的时间戳。按照时间格式标准表示,并需要使用UTC时间,格式为yyyy-MM-ddTHH:mm:ssZ。示例:2019-06-01T12:00:00Z表示北京时间2019年06月01日12点00分00秒。 Version String 是 API 的版本号,格式为 YYYY-MM-DD。取值范围:2019-06-01。 Format String 是 返回参数的语言类型。取值范围:json。 请求示例 https://oos.cn-hangzhou.aliyuncs.com/?Action=XXXXXX &Format=json &Version=2019-06-01 &Signature=cWgxtKc9dQWgSMB7OEhtOkq%2B9AM%3D &SignatureMethod=HMAC-SHA1 &SignatureNonce=479a2bf5-8045-11e9-8d42-6c96cfdd1fa1 &SignatureVersion=1.0 &AccessKeyId=key-test &Timestamp=2019-05-27T06%3A04%3A25Z … 公共返回参数 名称 类型 描述 RequestId String 请求ID。无论调用接口成功与否,我们都会返回请求ID。 阿里云OOS API支持基于URL发起HTTP/HTTPS GET请求。请求参数需要包含在URL中。本文列举了GET请求中的结构解释,并提供了OOS的服务接入地址(Endpoint)。 结构示例 以下为CreateTemplate一条未编码的URL请求示例: https://oos.cn-hangzhou.aliyuncs.com/?Action=CreateTemplate &TemplateName=YourTemplateName &<公共请求参数> https指定了请求通信协议。 oos.cn-hangzhou.aliyuncs.com指定了OOS的服务接入地址(Endpoint)。 Action=CreateTemplate指定了要调用的API,TemplateName=YourTemplateName是CreateTemplate规定的参数。 <公共请求参数>是系统规定的公共参数。 通信协议 支持HTTP或HTTPS协议请求通信。为了获得更高的安全性,推荐您使用HTTPS协议发送请求。 涉及敏感数据时,如用户密码和SSH密钥对,推荐使用HTTPS协议。例如,在StartExecution中指定敏感参数时。 接入地址 OOS API的服务接入地址,参见以下表格。为较少网络延时,建议您根据业务调用来源配置接入地址。 华东1(杭州) oos.cn-hangzhou.aliyuncs.com 华北2(北京) oos.cn-beijing.aliyuncs.com 华北5(呼和浩特) oos.cn-huhehaote.aliyuncs.com 华北3(张家口) oos.cn-zhangjiakou.aliyuncs.com 中国香港 oos.cn-hongkong.aliyuncs.com 华东2(上海) oos.cn-shanghai.aliyuncs.com 华南1(深圳) oos.cn-shenzhen.aliyuncs.com 印度(孟买) oos.ap-south-1.aliyuncs.com 美国(弗吉尼亚) oos.us-east-1.aliyuncs.com 德国(法兰克福) oos.eu-central-1.aliyuncs.com 英国(伦敦) oos.eu-west-1.aliyuncs.com 请求参数 您需要通过Action参数指定目标操作,例如Action=CreateTemplate。还需要指定接口的其他参数以及公共请求参数。 字符编码 请求及返回结果都使用UTF-8字符集编码。 对于每一次HTTP或者HTTPS协议请求,我们会根据访问中的签名信息验证访问请求者身份。具体由使用AccessKeyID和AccessKeySecret对称加密验证实现。 AccessKey相当于用户密码,AccessKey用于调用API,而用户密码用于登录OOS控制台。其中AccessKeyID是访问者身份,AccessKeySecret是加密签名字符串和服务器端验证签名字符串的密钥,必须严格保密谨防泄露。 说明 我们提供了多种编程语言的SDK及第三方SDK,可以免去您签名的烦恼。更多详情,请下载SDK。 构造规范化请求字符串 排序参数。排序规则以首字母顺序排序,排序参数包括公共请求参数和接口自定义参数,不包括公共请求参数中的Signature参数。 说明 当使用GET方法提交请求时,这些参数就是请求URL中的参数部分,即URL中?之后由&连接的部分。 编码参数。使用UTF-8字符集按照RFC3986规则编码请求参数和参数取值,编码规则如下: 字符A~Z、a~z、0~9以及字符 -、_、.、~不编码。 其它字符编码成%XY的格式,其中XY是字符对应ASCII码的16进制。示例:半角双引号(")对应%22。 扩展的UTF-8字符,编码成%XY%ZA…的格式。 空格( )编码成%20,而不是加号(+)。该编码方式与application/x-www-form-urlencoded MIME格式编码算法相似,但又有所不同。如果您使用的是Java标准库中的java.net.URLEncoder,可以先用标准库中percentEncode编码,随后将编码后的字符中加号(+)替换为%20、星号()替换为%2A、%7E替换为波浪号(~),即可得到上述规则描述的编码字符串。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("", "%2A").replace("%7E", "~") : null; } 使用等号(=)连接编码后的请求参数和参数取值。 使用与号(&)连接编码后的请求参数,注意参数排序与步骤一:构造规范化请求字符串一致。 现在,您得到了规范化请求字符串(CanonicalizedQueryString),其结构遵循请求结构。 构造签名字符串 构造待签名字符串StringToSign。您可以同样使用percentEncode处理上一步构造的规范化请求字符串,规则如下: StringToSign= HTTPMethod + "&" + //HTTPMethod:发送请求的 HTTP 方法,例如 GET。 percentEncode("/") + "&" + //percentEncode("/"):字符(/)UTF-8 编码得到的值,即 %2F。 percentEncode(CanonicalizedQueryString) //您的规范化请求字符串。 按照RFC2104的定义,计算待签名字符串StringToSign的HMAC-SHA1值。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加根据RFC3986规则编码后的参数Signature到规范化请求字符串URL中。 说明 计算签名时,RFC2104规定的Key值是您的AccessKeySecret并加上与号(&),其ASCII值为38。 示例 1. 参数拼接法 以调用ListTemplates查询模板为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,签名流程如下所示: 构造规范化请求字符串。 AccessKeyId=testid&Action=ListTemplates&Format=json&SignatureMethod=HMAC-SHA1&SignatureNonce=9a3fdf30-8049-11e9-8875-6c96cfdd1fa1&SignatureVersion=1.0&Timestamp=2019-05-27T06%3A35%3A22Z&Version=2019-06-01 构造待签名字符串StringToSign,详情请参见步骤二:构造签名字符串。 GET&%2F&AccessKeyId%3Dtestid&Action%3DListTemplates&Format%3Djson&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D9a3fdf30-8049-11e9-8875-6c96cfdd1fa1&SignatureVersion%3D1.0&Timestamp%3D2019-05-27T06%253A35%253A22Z&Version%3D2019-06-01 计算签名值。因为AccessKeySecret=testsecret,用于计算的Key为testsecret&,计算得到的签名值为 1FcsD6/AvH2KugeowoCJSi8lBd8=。示例使用的是Java Base64编码方法。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of(StringToSign) ) ) 添加RFC3986规则编码后的Signature=1FcsD6%2FAvH2KugeowoCJSi8lBd8%3D到步骤一:构造规范化请求字符串的URL中。 http://oos.cn-hangzhou.aliyuncs.com/?SignatureVersion=1.0&Format=json&Timestamp=2019-05-27T06%3A35%3A22Z&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&Version=2019-06-01&Signature=1FcsD6%2FAvH2KugeowoCJSi8lBd8%3D&Action=ListTemplates&SignatureNonce=9a3fdf30-8049-11e9-8875-6c96cfdd1fa1 通过以上URL,您可以使用浏览器、curl或者wget等工具发起HTTP请求调用ListTemplates,查询您的模板。 示例 2. 编程语言法 依然以调用ListTemplates查询模板为例。假设您获得了AccessKeyID=testid以及AccessKeySecret=testsecret,并且假定所有请求参数放在一个Java Map<String, String>对象里。 预定义编码方法。 private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException { return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null; } 预定义编码时间格式Timestamp。参数Timestamp必须符合时间格式规范,并需要使用UTC时间,时区为+0。 private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 构造请求字符串。 final String HTTP_METHOD = "GET"; Map parameters = new HashMap(); // 输入请求参数 parameters.put("Action", "ListTemplates"); parameters.put("Version", "2019-06-01"); parameters.put("AccessKeyId", "testid"); parameters.put("Timestamp", formatIso8601Date(new Date())); parameters.put("SignatureMethod", "HMAC-SHA1"); parameters.put("SignatureVersion", "1.0"); parameters.put("SignatureNonce", UUID.randomUUID().toString()); parameters.put("Format", "JSON"); // 排序请求参数 String[] sortedKeys = parameters.keySet().toArray(new String[]{}); Arrays.sort(sortedKeys); final String SEPARATOR = "&"; // 构造 stringToSign 字符串 StringBuilder stringToSign = new StringBuilder(); stringToSign.append(HTTP_METHOD).append(SEPARATOR); stringToSign.append(percentEncode("/")).append(SEPARATOR); StringBuilder canonicalizedQueryString = new StringBuilder(); for(String key : sortedKeys) { // 这里注意编码 key 和 value canonicalizedQueryString.append("&") .append(percentEncode(key)).append("=") .append(percentEncode(parameters.get(key))); } // 这里注意编码 canonicalizedQueryString stringToSign.append(percentEncode( canonicalizedQueryString.toString().substring(1))); 签名。因为 AccessKeySecret=testsecret,所以用于计算HMAC的Key为testsecret&,计算得到的签名值为1FcsD6/AvH2KugeowoCJSi8lBd8=。 // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal(stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,按照RFC3986规则编码后的URL如下所示: http://oos.cn-hangzhou.aliyuncs.com/?SignatureVersion=1.0&Format=json&Timestamp=2019-05-27T06%3A35%3A22Z&AccessKeyId=testid&SignatureMethod=HMAC-SHA1&Version=2019-06-01&Signature=1FcsD6%2FAvH2KugeowoCJSi8lBd8%3D&Action=ListTemplates&SignatureNonce=9a3fdf30-8049-11e9-8875-6c96cfdd1fa1 使用浏览器、curl或者wget等工具发送HTTP请求。 { "Templates": [ { "Hash": "9ea05673ea6c7d03fe8707ddd3d347d74f9e47963538097d120583c0b5385edf", "Description": "", "TemplateName": "demo", "ShareType": "Private", "Tags": [], "TemplateFormat": "JSON", "CreatedBy": "1000008528360000", "CreatedDate": "2019-06-01T12:00:00Z", "TemplateVersion": "v1", "TotalExecutionCount": 1 },...], "NextToken": "gAAAAABc5pnvl_meBuZkGEbZNmzTOA1RotEjFs4q8q2fICes_oGk4qenxGB5UeyXYWa5eF4TeZLQMpnVc6rmhr2BC0Kahyx1P5brt_fQvLFTLBEcXQzzqsWwxDS-Y1xL7pkhOOgU_K3Z0-dMQHOkIQwWhodp4qutzKNO7gQ-EPWQvM1ugrGkonFDe_bV3TckHyHqgJDTLwk8Swfm1NvnZTXg9AH8YLvhu0fTK8sgXI6nBkvqTkozedWFhq8jmH1SFbs1yVZoKoKpFaYV6-vuTFcUO9G9-5W0YVdfliTuEOf42QHtkWLZ8jj1Xhmk9rTBYjb7P4KmRm7b7UhQ6FamvpVv9vXlCQvWAafnPgT98ViFlr6z7ByNHrI=", "RequestId": "8B813042-7F00-45CE-AF8C-85CCEEFC6BA2", "MaxResults": 50 } 返回结果列举了模板信息。 返回结果为JSON格式。为了便于查看和美观,API文档返回示例均有换行和缩进等处理,实际返回结果无换行和缩进处理。 正常返回示例 接口调用成功后会返回接口返回参数和请求ID,我们称这样的返回为正常返回。HTTP状态码为2xx。 JSON示例 { "RequestId": "AC467B38-3910-447D-87BC-AC049166F216" /* 返回结果数据 */ } 异常返回示例 接口调用出错后,会返回错误码、错误信息和请求ID,我们称这样的返回为异常返回。HTTP状态码为4xx或者5xx。 您可以根据接口错误码,参考公共错误码以及API错误中心排查错误。当您无法排查错误时,可以提交工单联系我们,并在工单中注明服务节点HostId和RequestId。 JSON示例 { "RequestId": "A40CFF28-407A-40B5-B6A5-AC049166F216", /* 请求 ID / "HostId": "oos.cn-hangzhou.aliyuncs.com", / 服务节点 / "Code": "InvalidNextToken", / 错误码 / "Message": "NextToken is invalid" / 错误信息 / } 公共错误码 错误代码 HTTP状态码 错误信息 描述 InvalidVersion 400 Specified parameter Version is not valid. 给定的Version非法。请检查URL中指定的Version的正确性。 InvalidAction.NotFound 400 Specified api is not found, please check your url and method. 给定的API不存在。请检查URL中指定的Action的正确性。 Throttling.User 400 Request was denied due to user flow control. 访问频率太高导致流控。 InvalidParameter 400 内容随校验场景不同而不同,如 TemplateName can not contain “” 参数非法。请根据错误信息来检查指定参数的正确性。 User.NoPermission 400 User has no permission to do the action: ({api_name}) 用户没有调用某个API的权限。请检查是否在RAM中给当前用户赋予了OOS的API的权限。 InvalidStsToken 400 Invalid STS token to do the action: ({api_name}) 给定的STS Token非法。 ExpiredStsToken 400 Expired STS token to do the action: ({api_name}) 给定的STS Token过期。 MissingParameter 400 The Parameter ({name}) was not provided. 缺少必填参数。 QuotaExceed 400 The Quota ({key}) exceeded ({value}). 特定属性(如模板数量、正在运行的执行数等)超过上限。 InvalidAccountType 400 The account type ({account_type}) was not supported. 不支持给定的账号类型。 TemplateValidationError 400 {reason} 模板约束,如参数类型、数值等,校验不通过。 InvalidFunctionParameters 400 The specified function {fn_name}’s parameters are incorrect. 模板中使用函数时给定的参数校验错误。请检查参数的数量和值。 InvalidTemplateReference 400 The specified reference {resource} (in {key}) is incorrect. 模板内参数引用不正确。 UnknownUserParameter 400 The parameter ({key}) was not defined in engine. 模板中给定的参数未定义或不被支持。 InvalidTimerTriggerParameter 400 The parameter ({key}) is invalid TimerTrigger动作的给定参数非法。 InvalidTemplateParameter 400 The parameter ({key}) has no attributes. 模板中的Parameters类型非法,必须为字典。
1934890530796658 2020-03-24 11:32:55 0 浏览量 回答数 0

问题

阿里云运维部署工具AppDeploy详细教程

本帖在ECS板块分开发过几个帖子,现在整合在一个帖子里,希望对大家有所帮助。 欢迎大家使用阿里云运维部署工具AppDeploy ,您若看到这篇文章说明您的工作涉及到服务器的运维和应用部署工作、...
阚俊宝 2019-12-01 20:59:13 17044 浏览量 回答数 1

云产品推荐

上海奇点人才服务相关的云产品 小程序定制 上海微企信息技术相关的云产品 国内短信套餐包 ECS云服务器安全配置相关的云产品 开发者问答 阿里云建站 自然场景识别相关的云产品 万网 小程序开发制作 视频内容分析 视频集锦 代理记账服务 阿里云AIoT 阿里云科技驱动中小企业数字化