Requests库(三)如何获取接口传参参数

2021-03-15 16:28:11 浏览数 (1)

Requests库分享系列:

Requests库(一)

Requests库(二)

这里我们来讲解第三篇。


前面的两篇呢,我们介绍了如何请求数据,如何接受json返回,如何处理请求头,今天我们来看看如何去处理携带参数。在实际工作中呢,我们是需要携带请求参数的,那么我们如何增加携带的参数呢。

首先呢,我们要知道我们需要传参的参数是什么,传参参数类型是什么,或者应该用什么样的格式的组合去携带这些参数。一般我们获取接口传参的途径有哪些呢,给大家列举下。

1.接口文档

2.通过开发者工具,抓包获取

3.和接口开发者沟通

4.看开发的代码,去发现参数

以上这四种方式呢,都是获取传参的方式呢,我们下面带领大家去看看,这四种方式。

1.接口文档。

在我们实际工作中,无论是前后端开发,还是第三方都会提供成熟的技术文档。在公司内呢,会搭建公司内部的接口文档。第三方对接的接口会有对应的接口文档。由于公司研发接口文档是为公司内部的,涉及公司秘密,所以我们来看下第三方的接口文档。我们来看下钉钉机器人的。地址:https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq。我们来看下里面是如何对接口文档的参数进行要求的。

这里面的的参数的描述的很清楚,我们只需要传递对应的参数,就可以请求成功。那么我们如果不携带参数直接请求会怎样。(备注:由于钉钉机器人安全的要求呢,我们需要增加安全设置,我这里使用的是IP段。方式如下

在百度输入ip地址查询即可返回本机的ip地址段

代码语言:javascript复制
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',

}
r=requests.post("https://oapi.dingtalk.com/robot/send?access_token=#你要传递自己钉钉机器人的token",headers=headers)
print(r.json())

结果返回

代码语言:javascript复制
  这个返回是说的请求头Content-Type无效,那么我们如何传递有效的请求的content-type呢,

我们对官方文档的示例再次查看,发现请求头传递Conten-Type类型是json的。

我们增加改造:

代码语言:javascript复制
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
'Content-Type':'application/json'
}
r=requests.post("https://oapi.dingtalk.com/robot/send?access_token=你要传递自己钉钉机器人的token",headers=headers)
print(r.json())

那么接口返回什么呢。

接口返回我们缺少参数。那么我们就去组合我们的参数即可,根据官方文档。官方的示例如下

根据接口文档 atMobiles和atMobiles可以填写也可以不填写,我们就默认为不填写,那么我们的参数就如下所示

代码语言:javascript复制
data={
    "msgtype": "text",
    "text": {
        "content": "我就是我, 是不一样的烟火"
    }
}

那么这个时候我们可以去请求下。直接传递data参数

代码语言:javascript复制
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
'Content-Type':'application/json'
}
data={
    "msgtype": "text",
    "text": {
        "content": "我就是我, 是不一样的烟火"
    }
}
r=requests.post("https://oapi.dingtalk.com/robot/send?access_token=你要传递自己钉钉机器人的token",headers=headers,data=(data))
print(r.json())

结果发现:

我们都传递了参数,为什么还是缺少json呢,其实报错已经给你提示的很明显了,我们在headers也写了,类型是json的,那么我们就要根据接口的规定来。那么我们来引入下json模块,python自带的模块。然后在参数传递的时候呢,我们使用json.dumps下参数既可以转化为json格式。代码如下:

代码语言:javascript复制
import json
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',
'Content-Type':'application/json'
}
data={
    "msgtype": "text",
    "text": {
        "content": "我就是我, 是不一样的烟火"
    }
}
r=requests.post("https://oapi.dingtalk.com/robot/send?access_token=你要传递自己钉钉机器人的token",headers=headers,data=json.dumps(data))
print(r.json())

再次运行返回如下所示。

我们可以看到钉钉群机器人请求成功

那么我们来看下第二中方式,


2.开发者工具或者抓包。

我们在访问七麦的时候呢,就可以这么做。使用F12或者右键选择检查,即可,关注网站的请求呢,我们选择network即可。然后我们去刷新页面,就可以获取到对应的请求。

这样我们去查看headers呢,就能知道对应的请求的参数,返回的正确的结果,是什么样子呢,我们就可以看下:

这样我们就知道来这个的请求返回的什么是正确的。然后我们就可以去调试我们的参数了。

代码语言:javascript复制
import json
import requests
headers={
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36',

}
data={
   "redirect_time": 0,
'dns_time': 1,
'tcp_time': 36,
'request_time': 21,
'blank_time': 509,
'onload_time': 652,
'url': '/rank/marketRank'
}
r=requests.post("https://api.qimai.cn/userRequest/index?analysis=eEcbQxJVQmJVQUVVSxAYUQpQUxlwEwkABwkBCFQFDFQGdkIB",headers=headers,data=json.dumps(data))
print(r.json())

我们看下返回的结果

这样就代表这我们请求是成功的。


3.和接口开发者沟通

这个需要我们去沟通,去整理,包括参数的类型,需要的参数。这样增加很大的工作量。这就要求我们在去和开发沟通的时候要准备好沟通的内容。然后我们记录后在调试我们的接口请求,可以趁机规范下。

4.看开发的代码,去发现参数

当你遇到开发没有给你接口文档,也没有给你对接,恰好你有后端接口代码的权限,你就可以去down下来,然后去根据自己的接口去找对应的接口文件。这个需要开发告诉你在哪个文件,或者你对开发使用的规范的框架熟悉,这样才能获取接口参数的类型,需要的参数。成本比前三种难度增加,但是对你的收益是最大。

以上四种方式呢,是我们获取接口传参的途径。然后我们重点分析了前两种,并且找到了对应的例子给大家剖析。


这次分享呢,就到这里,如果你感觉有用,请点亮在看很关键。记得点赞。

0 人点赞