中级-发送请求
get请求
比如我们刚刚演示的归属地查询,就是一个get请求
- 接口示例-手机归属地查询接口
- 接口服务器地址:
https://tcc.taobao.com
- 接口的路径:
cc/json/mobile_tel_segment.htm - 请求方式:
get - 请求参数:
tel含义:手机号码
- 接口服务器地址:
使用requests发送get请求,使用requests.get()
这个get方法,常用的参数有
- url
请求地址 - params
请求参数 - headers
头部信息
其中 url参数是必传参数,参数与头部信息,如果没有可不用传递,其中,请求参数,以词典的方式,传递
import requests
api_url = 'https://tcc.taobao.com/cc/json/mobile_tel_segment.htm'
kv = {}
kv['tel'] = '13312341234'
r = requests.get(url=api_url,params=kv)
print(r.text)
上述代码中,通过requests.get()发送get请求,然后把请求的内容,赋值给了变量r,
那如果想要查看相应的信息,就需要通过r.text进行查看。
当然除了r.text之外,还有r.json()进行查看。
注意,r.text是将响应信息以字符串的方式接受,如果响应的内容,是一个json格式,则可以使用r.json()以字典的方式接受,但是,如果返回的内容,不是json格式,而强制使用r.json()则会报错。
post请求
post请求,就以下面的注册接口举例子
服务器地址:
120.77.212.195
服务器端口:
8080
请求路径:
register
请求方式:
- POST
参数:
| 参数名 | 必选 | 说明 |
|---|---|---|
| username | 是 | 用户名 |
| password | 是 | 密码 |
| password_confirmation | 是 | 确认密码 |
返回示例
{'status': 30000, 'desc': '注册成功'}
使用requests发送post请求,使用requests.post()
这个post方法,常用的参数有
- url
请求地址 - data
请求参数 - headers
头部信息
其中 url参数是必传参数,参数与头部信息,如果没有可不用传递,其中,请求参数,以词典的方式,传递
注意:requests.get()与requests.post()方法的,只有请求的参数的参数名称不同。
get的参数,使用params表示post的参数,使用data表示
import requests
# 接口地址
reg_url = 'http://120.77.212.195:8080/register'
# 请求参数
kv = {}
kv['username'] = 'imsam_001'
kv['password'] = '123123'
kv['password_confirmation'] = '123123'
# 发送post请求
r = requests.post(url=reg_url,data=kv)
# 因为返回的是一个json格式,因此可以使用json方法接受返回数据
print(r.json())
带上头部信息
如果有些请求需要带上头部信息,则就在发送请求是带上headers参数即可,不管是get请求还是post请求,都是headers参数,没有什么区别。
比如:有如下一个登录的接口,我已经提前注册好了用户名与密码peadmin
想要实现登录接口。
| 接口地址 | 端口 | 协议 |
|---|---|---|
| exam.imsam.cn | 80 | http |
Http头部信息
| 名称 | 值 |
|---|---|
| User-Agent | Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36 |
必传参数
| 名称 | 值 | 解释 |
|---|---|---|
| userhash | 0.unix时间戳 |
所有的接口都需要该参数 |
请求URL:
index.php?user-app-login
请求方式:
- POST
参数:
| 参数名 | 必选 | 说明 |
|---|---|---|
| args[username] | 是 | 用户名 |
| args[userpassword] | 是 | 密码 |
| userlogin | 是 | 系统默认值:1 |
返回示例
{
: "statusCode":201,
: "message":"\u64cd\u4f5c\u6210\u529f",
: "callbackType":"forward",
: "forwardUrl":"reload"
}
- 请求代码
import requests
import time
# 接口地址
login_url = 'http://exam.imsam.cn/index.php?user-app-login'
# 请求参数
kv = {}
kv['args[username]'] = 'peadmin'
kv['args[userpassword]'] = 'peadmin'
kv['userlogin'] = '1'
# 每个参数都需要一个默认参数 userhash,他的值是 "0.时间戳"
hash_value = '0.{0}'.format(int(time.time()))
kv['userhash'] = hash_value
# 头部信息,也按照dict的方式传递
hd = {}
hd['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
# 发送post请求
r = requests.post(url=login_url,data=kv,headers=hd)
# 因为返回的是一个json格式,因此可以使用json方法接受返回数据
print(r.json())
请求间带上cookie
在Web系统中,由于HTTP协议的特性,请求与请求之间是独立的,比如,我们除了上面有个登录请求,现在还有一个充值订单的接口。
充值订单接口需要,依赖于登录的。而在web系统中通常是使用cookie来保持登录态的。
app的接口一般不会通过cookie来保持登录态,而是通过token值来进行的。token值的练习,自行操作,此处只演示如何保持cookie。
想要让多个请求之间保持cookie状态,则多个请求之间,必须处于同一会话中,在requests中,提供了requests.session()创建会话。
import requests
import time
# 接口地址
login_url = 'http://exam.imsam.cn/index.php?user-app-login'
# 请求参数
kv = {}
kv['args[username]'] = 'peadmin'
kv['args[userpassword]'] = 'peadmin'
kv['userlogin'] = '1'
# 每个参数都需要一个默认参数 userhash,他的值是 "0.时间戳"
hash_value = '0.{0}'.format(int(time.time()))
kv['userhash'] = hash_value
# 头部信息
hd = {}
hd['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
# 注意,此处因为需要保证后续接口都处于同一会话中,则需要创建会话
s = requests.session()
# 通过会话,去发送请求
r = s.post(url=login_url,data=kv,headers=hd)
# 因为返回的是一个json格式,因此可以使用json方法接受返回数据
print(r.json())
pay_url = 'http://exam.imsam.cn/index.php?user-center-payfor'
# 请求参数
kv = {}
kv['money'] = '100'
kv['payforit'] = '1'
# 每个参数都需要一个默认参数 userhash,他的值是 "0.时间戳"
hash_value = '0.{0}'.format(int(time.time()))
kv['userhash'] = hash_value
# 头部信息
hd = {}
hd['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36'
# 再次通过同一个会话,发送充值请求
r = s.post(url=pay_url,data=kv,headers=hd)
print(r.json())
浙公网安备 33010602011771号