中级-发送请求

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())

 

posted @ 2021-08-15 17:44  康kang  阅读(105)  评论(0)    收藏  举报