简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。Requests 的哲学是以 PEP 20 的习语为中心开发的,所以它比 urllib 更加 Pythoner。更重要的一点是它支持 Python3 哦!

一、安装

使pip安装:

pip install requests

安装完后,运行一个简单的例子查看是否安装成功:

import requests                                 #导入requests包
r=requests.get(url='https://www.baidu.com/')
print(r.status_code) #查看请求返回的状态
#结果
200

  

二、几种请求类型

  ①get请求:requests.get('url')

  ②post请求:requests.post("url/post")

  ③put请求:requests.put("url/put")

  ④delete请求:requests.delete("url/delete")

  ⑤head请求:requests.head("url/get")

  ⑥options请求:requests.options("url/get")

三、get请求

传递url参数

在get请求中,允许使用params关键字,以一个字典来传递这些参数,例如:

content={'pageIndex':1,'pageSize':10,'categoryId':9}
r=requests.get('http://www.xxxxx.com/api/v2/activities',params=content)
print (r.url) #获取请求内容
print (r.text) #获取响应内容
#结果
http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9
{"data":[],"pageIndex":1,"totalNum":0,"hasMore":false,"pageSize":0}

如果字典中存在None的值,是不会添加到url请求中的

content={'pageIndex':1,'pageSize':10,'categoryId':None}
r=requests.get('http://www.xxxxx.com/api/v2/activities',params=content)
print (r.url) #结果
http://www.xxxx.com/api/v2/activities?pageIndex=1&pageSize=10

  

ps:不使用params的话,也可在请求中输入全部的地址,效果相同,如:

r=requests.get('http://m.xxxxx.com/api/v2/activities?pageIndex=1&pageSize=10&categoryId=9')

注意:在某些get请求中,需要辨别用户身份,因此会需要在请求中发送cookie内容,如某些需要用户登录才能访问的页面,相关内容请轻戳这里

四、post请求

1.以表单形式传递参数:

想要发送一些表单形式的数据,只需简单的传递一个字典给data关键字,在发送请求的时候,会自动编码为表单的形式,例如:

content={'key1':'value1','key2':'value2'}
r=requests.post('http://www.xxx/api/v1/user/login',data=content)

2.以json形式传递参数:

在很多情况下,想要发送的数据并非为表单形式,而是一个json格式的字符串,如果传递给data关键字的内容不是一个dict,而是

一个string,那么在发送的时候,数据会被直接发送出去,不会自动编码为表单形式。

为了将一个数据结构转换为json格式的字符串,首先得需要导入一个json包,两种常用的方法为:json.dumps()与json.loads()

import json
content={'name':'Nee','age':'18'}
str_content=json.dumps(content) #把dick编码为json格式的字符串
print (str_content)
print (type(str_content))
#结果:
{"name": "Nee", "age": "18"}
<class 'str'> #此时的类型为str content=json.loads(str_content) #把json格式的字符串解码为原先的数据结构
print (content)
print (type(content))
#结果
{'name': 'Nee', 'age': '18'}
<class 'dict'>

注意:1.json编码支持的基本类型有:None, bool, int, float, string, list, tuple, dict。对于字典,json会假设key是字符串(字典中的任何非字符串key都会在编            码时转换为字符串),要符合JSON规范,应该只对python列表和字典进行编码。此外,在WEB应用中,把最顶层对象定义为字典是一种标准做法。                    2.json编码的格式几乎和python语法一致,略有不同的是:True会被映射为true,False会被映射为false,None会被映射为null,元组()会被映射为列表[],如:

content={'a':None,'b':True,'c':False,'d':(1,2)}
str_content=json.dumps(content)
print (str_content) #结果:
{"a": null, "b": true, "c": false, "d": [1, 2]}

因此 想要在post请求中使用data关键字来传递json格式的字符窜,首先得把dict转为string,例如:

import requests
import json
url='http://www.xxx.com/api/v1/user/login'
data={"ua":"13700002000","pw":"12qwaszx","ct":12}
r=requests.post(url,data=json.dumps(data)) #在一些post请求中,还需要用到headers部分,此处未加,在下文中会说到
print (r.text) #结果
{"newUser":false,"user":{"userId":531,"mobileNo":"13700002000","userName":"测试用户2000".......}

除了可以对dick编码后以string的方式传递参数外,还可以直接使用json关键字直接传递,在传递时会自行进行编码为string类型

import requests            #不需要导入json模块
url='http://xxxx/api/v1/user/login'
data={"ua":"13700002000","pw":"12qwaszx","ct":12}
r=requests.post(url,json=data)

在post请求中用到的cookie部分。先关内容还是轻戳这里

五、定制headers

若想要为请求添加头部信息,只需要在请求中使用headers关键字传递一个字典即可

首先简单介绍下headers中的内容:

  Host:www.xxx.com                   指定请求资源的主机

  Accept:image/png,*/*,q=0.5                指定客户端接受哪些类型的响应内容

  Accept-Language:zh-CN,zh;q=0.8,en;q=0.6     客户端的操作系统语言,通常使用中文操作系统,属性值一般为zh-cn

  Accept-Encoding:gzip, deflate               客户端所能接受的编码规则或格式规范

  Referer:Referer':'http://xx.com/user/login.html?   可以理解为请求来源

  Connection:keep-alive               表示当client和server通信时对于长链接如何处理  

  cookies                       不解释...

  ....

查看请求中发出的请求头,可以使用如下方法:

import requests
r=requests.post(url,data)
print(r.request.headers) #查看发出的请求头 -----结果-----
{'User-Agent': 'python-requests/2.13.0', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive',
'Content-Length': '49', 'Content-Type': 'application/json'}

  

定制headers请求如下:

import requests
headers={'Accept':'*/*'
'Accept-Encoding':'gzip, deflate, sdch'
...
}
r=requests.post(url,data,headers=headers)

  

六、响应

1.响应状态

在请求发送成功后,可以用status_code来查看相应状态(每个状态代表的具体意义不在此文介绍)

import requests
r=requests.get(url)
print(r.status_code) -----结果-----
200

2.响应内容

在上面的内容中,已经展示了用text来获取相应的内容,返回的内容为string

import requests
r=requests.get(url)
print (r.text)
print (type(r.text)) #查看返回内容的类型 -----结果-----
.......... #返回的具体内容
<class 'str'> #类型为string

除此之外,requests中也带有带有一个内置的json解码器,将返回的内容转换为dict

import requests
r.requests.get(url)
print (r.json())
print (type(r.json())) -----结果-----
......
<class 'dict'>

那么通过json解码器转为dict后,想要查看到返回内容中某个具体参数的值,就比较方便啦!

3.响应内容编码格式

在获取响应内容的时候,可以使用r.encoding来查看相应内容的编码格式

import requests
r=requests.get(url)
print(r.encoding) -----结果-----
UTF-8

也可以进行指定编码,当改变了编码方式是后,每次获取响应内容,都会使用新的编码方式

import requests
r=requests.get(url)
r.encoding='ISO-8859-1'
print(r.text)

4.响应头内容

import requests
r=requests.get(url)
print (r.headers)

5.cookies

import requests
r=requests.get(url)
print (r.cookies)

七、设置超时时间

可以通过timeout来设置超时时间,如果在此时间内没有响应,会报错

import requests
r=requests.get(url,timeout=1)

  

python+requests实现接口测试 - get与post请求使用的更多相关文章

  1. python+requests实现接口测试 - get与post请求使用(转载)

    转自:http://www.cnblogs.com/nizhihong/p/6567928.html 简介:Requests 是用Python语言编写,基于 urllib,采用 Apache2 Lic ...

  2. python+requests+json 接口测试思路示例

    实际项目中用python脚本实现接口测试的步骤: 1 发送请求,获取响应  >>2 提取响应里的数据,对数据进行必要的处理  >>3 断言响应数据是否与预期一致 以豆瓣接口为例 ...

  3. python+requests实现接口测试 - cookies的使用

    在很多时候,发送请求后,服务端会对发送请求方进行身份识别,如果请求中缺少识别信息或存在错误的识别信息, 会造成识别失败. 如一些需要用户登录以后才能访问的页面. import requests mya ...

  4. Python+requests+excel接口测试

    2018-06-14   17:00:13 环境准备: - Python 3.7 - requests库 - xlrd 1.创建Excel文件 2.读取Excel文件 import xlrd clas ...

  5. python+requests之接口测试

    最近学习接口测试,测试工具玩的差不多了,想用代码来尝试一下. 发现一个简单的库,requests 一:安装 pip install requests 二:使用 import requests url ...

  6. python+requests实现接口测试 - cookies的使用 (转载)

    出自:https://www.cnblogs.com/nizhihong/p/6699492.html 在很多时候,发送请求后,服务端会对发送请求方进行身份识别,如果请求中缺少识别信息或存在错误的识别 ...

  7. python+requests+excel 接口测试

    1.EXCEL文件接口保存方式,如图. 2.然后就是读取EXCEL文件中的数据方法,如下: import xlrd class readExcel(object): def __init__(self ...

  8. requests实现接口测试

    python+requests实现接口测试 - get与post请求基本使用方法 http://www.cnblogs.com/nizhihong/p/6567928.html   Requests ...

  9. Python+Requests接口测试教程(1):Fiddler抓包工具

    本书涵盖内容:fiddler.http协议.json.requests+unittest+报告.bs4.数据相关(mysql/oracle/logging)等内容.刚买须知:本书是针对零基础入门接口测 ...

随机推荐

  1. 【C#】隐式类型var

    在.NET 3.0后微软引入了隐式类型var,编译器可以自动判断变量的类型,通过var这个隐式类型,可以提高开发人员的开发效率,很多时候可以不考虑对象的类型,编译器会自动帮我们判断 使用隐式类型和使用 ...

  2. 深入理解jQuery插件开发【转】

    如果你看到这篇文章,我确信你毫无疑问会认为jQuery是一个使用简便的库.jQuery可能使用起来很简单,但是它仍然有一些奇怪的地方,对它基本功能和概念不熟悉的人可能会难以掌握.但是不用担心,我下面已 ...

  3. AndroidManifest.xml配置文件详解(转载)

     AndroidManifest.xml配置文件详解 2013-01-05 10:25:23 分类: Android平台 AndroidManifest.xml配置文件对于Android应用开发来说是 ...

  4. Paxos、ZAB、RAFT协议

    这三个都是分布式一致性协议,ZAB基于Paxos修改后用于ZOOKEEPER协议,RAFT协议出现在ZAB协议之后,与ZAB差不多,也有很大区别. 1. Paxos 分布式节点分为3种角色, Prop ...

  5. 【Linux】安装配置Tomcat7

    第一步:下载Tomcat安装包 下载地址:https://tomcat.apache.org/download-70.cgi [root@localhost ~]# wget http://mirro ...

  6. JavaScirpt(JS)的this细究

    一.js中function的不同形态 js中类和函数都要通过function关键字来构建. 1.js中当函数名大写时,一般是当作类来处理 function Foo(name, age) { this. ...

  7. String变量的两种创建方式

    在java中,有两种创建String类型变量的方式: String str01="abc";//第一种方式 String str02=new String("abc&qu ...

  8. 微信小程序问题总结

    1.navigator不能跳转到tabBar所包含的页面 例如: tabbar包含center页面,不包含page1页面,使用如下跳转: <navigator url='../center/ce ...

  9. json中定义数组

    我们经常会看到在js中定义普通函数: function f1(a,b){ console.log(a+b); } f1(); 今天我们看一下如何在json里边定义函数并调用: var json = { ...

  10. 关于hibernate的一点心得

    1.部门和员工的关系: 部门<->员工是一对多的关系,即一个部门有多个员工,所以员工表里有部门id:depart_id 在下面这个代码中各添加部门和员工的一个记录即:新增一个部门,同时这个 ...