zoukankan      html  css  js  c++  java
  • 接口测试 -- requests

    requests是python实现的最简单易用的HTTP库

    官网地址:http://cn.python-requests.org/zh_CN/latest/

    一、环境安装

    cmd -> pip install requests,安装完成后输入pip list可以看到requests即代表安装成功

    二、get请求

    1. 未携带参数

    # 第一步:导入包
    import requests
    # 第二步:发送get请求
    urlstr = 'https://www.wanandroid.com/blog/show/2'
    r = requests.get(url=urlstr) # r = response
    # 第三步:获取结果
    print(r.text)

    注意:状态码200只能说明这个接口访问的服务器地址是对的,并不能说明功能OK,一般要查看响应的内容,r.text是返回文本信息

    2. 携带参数 -- 参数单独写

    # 导入包
    import requests
    # 发送get请求
    urlstr = 'https://www.wanandroid.com/article/query'
    param = {'k':'Android'} # 参数
    r = requests.get(url=urlstr,params=param)
    # 获取结果
    print(r.text)
    print(r.status_code)

    3. 携带参数 -- 参数直接放在url中

    import requests
    # 发送get请求,将参数直接携带在url中
    urlstr = 'https://www.wanandroid.com/article/query?key=Android'
    r = requests.get(url=urlstr)
    # 获取结果
    print(r.text)
    print(r.status_code) # 打印出状态码
    print(r.headers) # 打印出header信息

    4.多个参数格式:

    param = {"key1": "value1", "key2": "value2", "key3": "value3"}

    5.content

    百度首页如果用r.text会发现获取到的内容有乱码,因为百度首页响应内容是gzip压缩的(非text文本)

    如果是在fiddler工具乱码,是可以点击后解码的,在代码里面可以用r.content这个方法,content会自动解码 gzip 和deflate压缩

    代码:

    import requests
    r = requests.get('https://www.baidu.com')

    print(r.url)
    print(r.encoding) # 编码
    print(r.content) # 获取返回内容(自动解码gzip)
    print(r.headers)
    print(r.cookies)

    6.response -- 返回内容还有其它更多信息

    -- r.status_code     #响应状态码

    -- r.content         #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩

    -- r.headers         #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None

    -- r.json()          #Requests中内置的JSON解码器,处理后对应Python的dict

    -- r.url             # 获取url

    -- r.encoding        # 编码格式

    -- r.cookies         # 获取response返回的cookie

    -- r.raw             #返回原始响应体

    -- r.text            #字符串方式的响应体,会自动根据响应头部的字符编码进行解码

    -- r.raise_for_status() #失败请求(非200响应)抛出异常

    三、发送post请求

    1. 用help函数查看相关注释和案例内容

    import requests
    help(requests)

    ① 查看python发送get和post请求的案例

    ② 发送post请求(json形式)

    post的body是json类型,有两种方法来传递json数据
    第一种:先导入json模块,用dumps方法转化成json格式

    import requests,json
    # 发送请求
    urlstr = 'http://httpbin.org/post'
    payload = {'qq群名':'selenium+jmeter+loadrunner','qq群号':'106014970'}
    # 通过json.dumps方法将python字符串转化成json类型
    payload = json.dumps(payload)
    # 发送请求
    r = requests.post(url=urlstr,data=payload)
    # 获取结果
    print(r.text)
    # 返回为json类型,既可以通过r.json方法来查看结果
    print(r.json())

    第二种:使用json参数默认处理成json格式进行传递

    import requests,json
    # 发送post请求
    urlstr = 'http://httpbin.org/post'
    payload = {'qq群名':'selenium+jmeter+loadrunner','qq群号':'106014970'}
    # 发送请求,接口请求为json数据,通过json=自动将python对象转变为json类型
    r = requests.post(url=urlstr,json=payload)
    # 获取结果
    print(r.text)
    # 返回为json类型,即可以通过r.json方法来查看结果
    print(r.json())

    最后返回结果,传到data里

    2. 发送post请求 -- 表单形式

    ① 登录接口

    # 导入包
    import requests
    # 发送post请求
    urlstr = 'https://www.wanandroid.com/user/login'
    # 参数
    data = {'username':'annieliang','password':'123456'}
    r = requests.post(url=urlstr,data=data)
    # 获取结果(与fiddler中抓到的请求一致)
    print(r.text)
    print(type(r.json())) # 查看类型
    # 通过dict-key来访问对应的值
    print(r.json())
    print(r.json()['errorCode'])
    print(r.json()['data']['username'])
    运行结果为:
    {"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""}
    <class 'dict'>
    {'errorMsg': '', 'errorCode': 0, 'data': {'password': '', 'admin': False, 'type': 0, 'collectIds': [-1], 'icon': '', 'token': '', 'chapterTops': [], 'username': 'annieliang', 'email': '', 'id': 22395}}
    0
    annieliang

    ②判断登录成功 -- 可以抓取页面上的关键元素,比如:账号名称,注销按钮,然后通过正则表达式提出这2个关键字

    import requests
    # 发送post请求
    urlstr = 'https://www.wanandroid.com/user/login'
    # 参数
    payload = {'username':'annieliang','password':'123456'}
    # 第二步:发送请求
    r = requests.post(url=urlstr,data=payload)
    # 第三步:获取结果(与fiddler中抓到的请求一致)
    print(r.text)
    # 查看类型后为字典类型,r.json将response中返回的json处理成了dict
    print(type(r.json()))
    # 通过dict-key来访问对应的值
    print(r.json()['data']['username'])
    # 判断是否登录成功(username是否是username)
    # 判断返回的json数据是否有登录的用户名或通过正则来获取
    if r.json()['data']['username'] == payload['username']:
    print('登录成功!')
    运行结果为:
    {"data":{"admin":false,"chapterTops":[],"collectIds":[-1],"email":"","icon":"","id":22395,"password":"","token":"","type":0,"username":"annieliang"},"errorCode":0,"errorMsg":""
    <class 'dict'>
    annieliang
    登录成功!

    四、携带header和cookie参数发送请求

    1.以玩Android登录为例,抓包查看请求头,header为Python的字典类型,所以可以支持dict类型的所有操作方式添加header信息,可以直接定义{},也可以通过dict[key]的方式添加

    # 导入包
    import requests
    # 发送get请求
    urlstr = 'https://www.wanandroid.com/blog/show/2'

    header = {'User-Agent':'Mozzilla/5.0'}
    cookie = {'JSESSIONID':'3E08EBE7538380CE432C7FEA74244011'}

    r = requests.get(url=urlstr,headers=header)
    # 获取结果
    print(r.text)
    print(r.headers)
    print(r.cookies)

    fiddler抓包得到header和cookie信息:

    五、正则表达式(待补充)

    六、os包的用法-path(待补充)

  • 相关阅读:
    文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"
    “/”和“\”和feof();
    VS快捷键说明
    vs2015安装VAssistX以后,去除中文注释会有红色下划线方法
    QT5.8+vs2015配置以及qt creater中出现中文乱码解决办法之一
    将ascll码转换成数值进行运算
    二维数组---指针数组和数组指针
    source insight 4.0.086破解
    make clean 和make distclean的区别
    长歌行
  • 原文地址:https://www.cnblogs.com/annie1226/p/10888293.html
Copyright © 2011-2022 走看看