接口测试post请求和get请求,post api接口
API许可和认证
高速代理API验证每个访问请求。这意味着每个请求都必须包含用于验证请求者的签名信息(签名参数)。签名是由安全证书生成的,它包含订单号(orderid)和API密钥。每一个订单都有对应的API密匙,相当于调用API的密码,必须严格保密,避免泄露。
打开接口验证。
为了兼容之前的API链接,可以提取三个接口:开放代理、专用代理、专用代理。默认情况下,不需要认证,生成的API链接可以直接使用。
其他接口在被调用之前必须验证签名。
建议您也开启成员中心三个代理提取接口的验证。
开放认证的好处是,即使拿到订单号,也无法使用API,安全性大大提高。
建议使用https调用接口。
强烈建议使用https调用API。加密使私人信息(如订单号和API密钥)更加安全,不会被第三方截获或拦截。
要使用https,只需将API链接开头的3358替换为https://即可。
签名验证机制
有两种签名机制可供选择:
密钥明文身份验证(默认)
数字签名验证
根据客户的业务需求,您可以选择其中一种签名验证。下面详细描述两种验证机制。
密钥明文验证
设置:sign_type=simple
明文认证非常简单,适合要求访问速度快,安全性要求低的开发者。
只需使用密钥明文身份验证将API密钥直接放入签名参数中。确认在会员中心订购的API密钥。比如你订购的API key是oeq 1 zxnmoxzlefzmjrqu 2 xufndo 7 kz,API link的签名参数是signature=oeq 1 zxnmoxzlefzmjrqu 2 xufndo 7 kz。
数字签名验证
参数设置:sign_type=hmacsha1
数字签名验证机制比较复杂,适合要求安全性的开发者。
HMAC-SHA1的数字签名。步骤如下。
1.生成签名字符串
生成签名字符串的详细步骤如下所示。
假设用户的orderId和apiKey如下:
订单编号:934995977901561
API键:u8 n 5a 0f 2hu 39 o 80 lpir 3 HQ 1 kug 37t b5i
注意:这只是一个例子,请根据用户的实际orderId和apiKey跟进!
例如,当用户调用这个接口时,请求获取订单到期日期的请求参数如下
参数名称
中国人
参数值
订单id
序号
934995977901561
符号类型
识别模式
hmacsha1
时刻表
当前时间戳
1555064362
1.1参数排序
首先,所有请求的参数按照参数名的字典顺序(ASCII码)以升序排序。注意:
1)按参数名排序即可,参数值可以保持对应,不考虑比例。
2)像InstanceIds.2,用ASCII码比较大小,排在InstanceIds.12之后,既不是字母也不是数值。可以使用编程语言的相关排序函数(比如php的ksort函数)来实现这个功能。
上例中参数的排序结果如下:
{
订单id: 954763036233510 ,
sign_type: hmacsha1 ,
时间戳:1555064362,
}
在用其他编程语言开发时,只要对上述例子的参数进行排序,得到的结果是一致的。
1.2拼接请求字符串
这一步生成一个请求字符串。对于orderid参数,参数名为“orderid”,参数值为“954763036233510”,因此格式为orderid=954763036233510。
请注意,“参数值”是原始值,而不是url编码值。
然后,用""连接每个格式化的参数,得到的请求字符串是:
orderid=954763036233510 sign _ type=hmac sha1 timestamp=155069980
1.3连接签名的原始字符串
这一步生成原始签名字符串。原始字符串由以下参数组成:
方法:支持POST和GET方法。这里使用Get请求。请注意,方法是大写的。
请求路径:例如/api/getOrderExpiration Time,用于获取订单的到期日期。的实际请求路径因接口而异。有关详细信息,请参见每个接口。
描述。
请求字符串:上一步中生成的请求字符串。
原签名字符串的拼接规则是:请求方法请求路径?请求字符串
示例拼接结果如下:
GET/api/getorderexpiretime?orderid=954763036233510 sign _ type=hmacsha 1 timestamp=1555069980
1.4生成签名字符串
该步骤生成签名字符串。首先对上一步得到的原始签名串进行HMAC-SHA1算法签名,然后对生成的签名串进行Base64编码,即可得到最终的签名串。
具体代码如下,以PHP语言为例:
$ API key= u 8n 5a 0 F2 Hu 39 o 80 lpir 3 HQ 1 kug 37 TB 5 I ;
$ raw str= GET/API/getorderexpiretime?orderid=954763036233510 sign _ type=hmacsha 1 timestamp=1555069980 ;
$ signStr=base64 _ encode(hash _ hmac( sha1 ,$rawStr,$apiKey,true));
echo $ signStr
最后的签名字符串是:
HLA 7 rlyoq 3 ss B2 xubzgpyozn 4=
用其他编程语言开发时,可以用上面例子中的原文进行签名验证,得到的签名字符串与例子中的一致。
2.签名字符串编码
生成的签名字符串不能直接用作请求参数,需要进行URL编码。
例如,上一步生成的签名字符串是hLAH7Rlyoq3SSB2xUbzGpyOZn4=,最终的签名字符串请求参数(signature)是+hLAH7Rlyoq3SSB2xUbzGpyOZn4=,将用于生成最终的请求URL。
给个提示
如果用户的请求方法是GET,或者请求方法是POST,内容类型是application/x-www-form-urlencoded,那么发送请求时所有请求参数的值都需要URL编码,参数key和=符号不需要编码。非ASCII字符需要在URL编码之前进行UTF-8编码。
一些编程语言的http库会自动对所有参数进行urlencode。在这种情况下,没有必要对签名字符串进行URL编码,否则,两次URL编码将导致签名失败。
其他参数值也需要编码,编码是RFC 3986。使用%XY对特殊字符(如中文字符)进行百分比编码,其中“X”和“Y”是十六进制字符(0-9和大写字母A-F)。使用小写会导致错误。
3.签名演示
实际调用API时,建议使用支持的SDK,封装了签名过程的SDK。开发时,只关注产品提供的具体接口。请参见SDK中心了解详细信息。目前支持的编程语言有:
为了更清楚地解释签名过程,将以实际编程语言为例来实现上述签名过程。请求的域名、调用的接口和参数值都服从上述签名流程,代码仅用于解释签名流程,不具有通用性。请在实际开发中尽量使用SDK。
最终的网址可能是:https://dev.kdlapi.com/api/getorderexpiretime? sign _ type=hmacsha 1 orderid=954763036233510 timestamp=1555080775 signature=+HLA 7 rlyoq 3 ss B2 xubzgpyozn 4=
注意
因为示例中的密钥是虚构的,所以时间戳不是当前系统时间。为了得到一个可以正常返回的url,需要将例子中的orderId和apiKey修改为真正的订单号和键,使用系统当前的时间戳作为时间戳。
4.代码示例
在下面的例子中,不同的编程语言,甚至是同一种语言,每次执行时都可能得到不同的URL,这说明参数的顺序不同,但这并不影响正确性。只要所有参数都存在并且签名计算是正确的。
Python示例
导入base64
导入hmac
导入hashlib
导入时间
导入uuid
导入请求
#生成签名的原始字符串
def get_string_to_sign(方法,端点,参数):
s=方法端点“?”
query_str=“”。join(%s=%s % (k,params[k]) for k in sorted(params))
返回查询字符串
#生成签名字符串
def sign_str(key,s,method):
hmac _ str=hmac . new(key . encode( utf8 ),s.encode(utf8 ),method)。摘要()
print(hmac_str:,hmac_str)
返回base64.b64encode(hmac_str)
if __name__==__main__ :
API _ key= vbeuiug 3 av 1 siuplasr 0 qymd 6 b xmfe 8
端点=/api/getorderexpiretime
数据={
timestamp: int(time.time()),
nonce: uuid.uuid4()。十六进制[:8],
sign_type: hmacsha1
}
s=get_string_to_sign(GET ,endpoint,data)
data[签名]=sign_str(api_key,s,hashlib.sha1)
打印(数据[签名])
#这里其实会调用,成功后可能会造成ip消耗。
r=requests . get( https://dev . kdlapi . com endpoint,params=data)
打印(网址)
4.SDK下载
sdk封装了签名计算过程,这样你就可以避免这部分编程工作,配置apikey后就可以调用了。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。