接口测试post请求和get请求,post api接口

  接口测试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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: