美文网首页
requests接口自动化

requests接口自动化

作者: 清水秋香 | 来源:发表于2020-03-03 13:32 被阅读0次
  • python中能构造HTTP请求的库很多,如:
    内置库:httplib、urllib2、http
    第三方库:urllib3、requests、pyCutl

  • requests库特点
    简单易用、功能强大、可读性强

  • requestku安装
    安装命令:pip install requests
    或者从github上下载源码进行安装
    或者用集成工具,如pycharm进行安装,也是可以的。

  • requests库帮助文档
    网址http://cn.python-requests.org/zh_CN/latest/

  • 请求方法对应的参数

参数\函数 Get Post Put Delete
url
params
data
json
headers
cookies
  • 如何构造请求体数据
    策略
    参数|选择方法
    -|-
    params参数|如果传入的是字典,自动编码表单。---针对的是get方法
    data参数| 如果传入的是字典,自动编码为表单。---针对的是post/put方法
    data参数|如果传入的是字符串,按原格式直接发布出去。---针对的是post/put方法
    json参数|如果传入的是字典,自动编码为json字符串。---针对的是post方法
    json参数|如果传入的是字符串,按源哥是基础上添加双引号发布出去。---针对的是post方法
    headers参数|传递的是字典格式---针对的是所有方法

  • 根据接口文档囊怎么构造请求
    1.如果是get请求,因为它只有一个params参数,所以根据口诀1构造请求就ok
    2.如果似乎post或者put请求,口诀为:1看2找3构。
    1看=看清楚接口文档content-type要求消息体为啥格式。表单格式还是json格式?
    2找=根据1看,用看到的格式来找策略,策略主要是2、3(或6),找到对应的策略
    3构=根据2找,找到的口诀来构造请求参数。

⚠️值得注意的是,注意字典中嵌套的字典,被嵌套的字典也可能被转换成表单

  • 请求代码
import requests
r = requests.get('http://www.baidu.com/')
r.encoding="utf-8"
print(r.text)
import requests
# action=list_course&pagenum=1&pagesize=20
payload = {
    'action':'list_course',
    'pagenum':1,
    'pagesize':20
}
# params会把字典中的参数变成表单格式放在url后面
r = requests.get('http://localhost:80/api/mgr/sq_mgr/',params=payload)
print(r.text)
import requests
header = {
    "Content-Type":"application/x-www-form-urlencoded"
}
payload = {
    'action':'add_course',
    'data':{"name":"初中化学","desc":"初中化学课程","display_idx":"100"}
}
r = requests.post('http://localhost:80/api/mgr/sq_mgr/',headers=header,data=payload)
print(r.text)
#排错方式:
#如果报错可以使用fiddler抓包进行排错,将请求提复制到url解码器进行解码,然后到json格式化,进行格式化看是否会出错。第二种方式在网页发起请求,使用fiddler抓包
#然后逐项对比,将错误的头和正确的请求体,在fiddler中发起请求,看是否有错误。
import requests
header = {'Content-Type':'application/json'}
payload="""
{
  "action" : "add_course_json",
  "data": {
    "name":"初中化学1",
    "desc":"初中化学课程",
    "display_idx":"98"
  }
}
"""
r = requests.post('http://localhost:80/apijson/mgr/sq_mgr/',data=payload.encode('utf8'),headers=header)
print(r.text)
import requests
header = {'Content-Type':'application/json'}
payload={
  "action" : "add_course_json",
  "data": {
    "name":"初中化学2",
    "desc":"初中化学课程",
    "display_idx":"98"
  }
}
r = requests.post('http://localhost:80/apijson/mgr/sq_mgr/',json=payload,headers=header)
print(r.text)#文本相应内容获取网页html文档的时候用
#二进制的格式
print(r.content)#字节响应内容   下载图片或文件的时候用
print(r.raw)#原始格式
#如果r返回的不是json会报异常
#接口文档中写了,返回json格式的消息体,才能用json
print(r.json())#字典格式
  • requests库响应消息体四种格式:
四种返回格式 说明 用处
r.text:文本响应内容 返回字符串类型 获取网页html时用
r.content:字节响应内容 返回字节类型 下载图片或文件时用
r.json():Json 解码响应内容 返回字典格式 明确服务器返回json数据才能用
r.raw:原始响应内容 返回原始格式

相关文章

网友评论

      本文标题:requests接口自动化

      本文链接:https://www.haomeiwen.com/subject/detclhtx.html